jsp请求压缩导出txt文件

来源:互联网 发布:win10打开网络无反应 编辑:程序博客网 时间:2024/06/07 12:13
@RequestMapping({ "/productDetailBurn_export.html" })@ResponseBodypublic void productDetailBurn_export(ProductDetailInfo productDetailInfo,HttpServletRequest request, HttpServletResponse response)throws IOException {DbContextHolder.setDbType("isap");ModelAndView modelAndView = new ModelAndView();ProductInfo pro = (ProductInfo) request.getSession().getAttribute("mainProduct");//产品信息if ((pro != null) && (pro.getProductId() != null)) {//获取当前产品绑定用户信息Developer dev = new Developer();dev.setPageNum(0);dev.setPageSize(10);dev.setAcctId(pro.getAcctId());List<Developer> developers = this.developerService.selectDeveloper(dev);Developer developer =developers.get(0);String openid = developer.getOpenId();Integer pageNum = Integer.valueOf(1);if (request.getParameter("pageNum") != null) {pageNum = Integer.valueOf(Integer.parseInt(request.getParameter("pageNum")));}productDetailInfo.setPageNum(Integer.valueOf((pageNum.intValue() - 1) * 10));productDetailInfo.setPageSize(Integer.valueOf(10));List strs = = this.productDetailInfoService.selectProductDetailBurn(productDetailInfo);//导出数据查询Map<String,Object> maps = new HashMap<String,Object>();maps.put("open_id", openid);List<Map<String,Object>> daList = this.developerService.selectDomainNameAddress(maps);//导出数据替换List newStrs = new ArrayList();        //组装用户域名地址信息if(strs.size() > 0 ){StringBuffer sbt = new StringBuffer();String st =null;if(daList.size() > 0 ){sbt.append("hostcnt=").append(daList.size()).append(";");for(int i = 0;i<daList.size();i++){sbt.append("host").append(i+1).append("=").append(daList.get(i).get("domain_name")).append(";");}st = sbt.substring(0, sbt.length()-1);}else{st="hostcnt=3;host1=box1.xcloudlink.com;host2=box2.xcloudlink.com;host3=box3.xcloudlink.com";}for(int j = 0 ;j<strs.size();j++){strs.get(j).toString().replace("host_count_name", st);newStrs.add(strs.get(j).toString().replace("host_count_name", st));}}        String spNum = String.valueOf(request.getParameter("splitNumber"));    List exList = new ArrayList();//拆分存储数据List ruList = new ArrayList();//存放拆分后数据if(spNum != null && !spNum.equals("")){double splitNumber = Double.valueOf(spNum);//拆分数量double a = newStrs.size();//查询结果总条数double c = a/splitNumber;double d = Math.ceil(c);//每个文件中存放数量    for(int h = 0;h<newStrs.size();h++){exList.add(newStrs.get(h));if(exList.size()== d){String rust = sendProductInfoExport(exList);//list数据拼接成string返回ruList.add(rust);exList.clear();//清除己拆分后集合数据}else if(h == newStrs.size()-1){String rust = sendProductInfoExport(exList);//list数据拼接成string返回ruList.add(rust);exList.clear();//清除己拆分后集合数据}}        //循环存储无拆分数据 startStringBuffer write = new StringBuffer();String enter = "\r\n";if (newStrs.size() > 0) {for (int i = 0; i < newStrs.size(); i++) {write.append((String) newStrs.get(i));write.append(enter);}}ruList.add(write.toString());//循环存储无拆分数据 end    }else{//循环存储无拆分数据 startStringBuffer write = new StringBuffer();String enter = "\r\n";if (newStrs.size() > 0) {for (int i = 0; i < newStrs.size(); i++) {write.append((String) newStrs.get(i));write.append(enter);}}ruList.add(write.toString());//循环存储无拆分数据 end}            response.setContentType("text/plain");String fileName = "devices";try {fileName = URLEncoder.encode("devices", "UTF-8");} catch (UnsupportedEncodingException e1) {e1.printStackTrace();}List filesName = new ArrayList();//文件名String filUrl = "";//文件路径// String url = "c:\\";//指定文件目录String url = "ownerManager/";//自己命名String writePath = "";if(ruList.size() > 0){for(int j = 0;j<ruList.size();j++){response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".txt");BufferedOutputStream buff = null;ServletOutputStream outSTr = null;try {outSTr = response.getOutputStream();buff = new BufferedOutputStream(outSTr);//定义文件名格式并创建  // 5.保存文件到filePath中String realPath = request.getSession().getServletContext().getRealPath("/");//获取项目在容器中的实际发布运行根路径File file1 = new File(realPath+ url.substring(0, url.lastIndexOf("/")));if (!file1.exists())file1.mkdirs();writePath = realPath + url;filUrl = writePath;File txtFile = File.createTempFile(fileName+j, ".txt", new File(writePath));  filesName.add(txtFile);//文件名称FileWriter writer =   new FileWriter(txtFile, true);                 writer.write((String) ruList.get(j));                 writer.flush();               writer.close();} catch (Exception e) {e.printStackTrace();} }}   //-------------压缩文件start   //设置压缩流:直接写入response,实现边压缩边下载//响应头的设置     response.setCharacterEncoding("utf-8");     response.setContentType("multipart/form-data");    //设置压缩包的名字    //解决不同浏览器压缩包名字含有中文时乱码的问题    String downloadName = "烧入数据导出.zip";//压缩包名    String agent = request.getHeader("USER-AGENT");       try {           if (agent.contains("MSIE")||agent.contains("Trident")) {               downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");           } else {               downloadName = new String(downloadName.getBytes("UTF-8"),"ISO-8859-1");           }       } catch (Exception e) {           e.printStackTrace();       }       response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");                        ZipOutputStream zipos = null;            try {                zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));                zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法             } catch (Exception e) {                e.printStackTrace();            }            //循环将文件写入压缩流            DataOutputStream os = null;            for(int i = 0; i < filesName.size(); i++ ){                            File file = new File(filesName.get(i).toString());                try {                    //添加ZipEntry,并ZipEntry中写入文件流                    //这里,加上i是防止要下载的文件有重名的导致下载失败                String st = filesName.get(i).toString();                                st =st.substring(st.lastIndexOf("\\"), st.length()-4);//windows环境下  //st =st.substring(st.lastIndexOf("/"), st.length()-4);linux环境下                st = st.substring(1, st.length());                                    zipos.putNextEntry(new ZipEntry(i + st));                    os = new DataOutputStream(zipos);                    InputStream is = new FileInputStream(file);                    byte[] bs = new byte[100];                    int length = 0;                    while((length = is.read(bs))!= -1){                        os.write(bs, 0, length);                    }                    is.close();                    zipos.closeEntry();                } catch (IOException e) {                    e.printStackTrace();                }             }            //关闭流            try {                os.flush();                os.close();                zipos.close();            } catch (IOException e) {                e.printStackTrace();            }            /**             * 删除文件             *///            for(int h  = 0;h<filesName.size();h++){//             String st = filesName.get(h).toString();//             st = st.substring(3, st.length());//             deleteFile(filUrl,st);          // }          //---------------------------压缩文件end} else {modelAndView.setViewName("redirect:/productinfo/productList.html");//跳转}}/*** 导出烧入数据拆分* 2017-7-12* @param response* @param num* @param newStrs*/public String sendProductInfoExport(List newStrs){String st="";StringBuffer write = new StringBuffer();String enter = "\r\n";try {if (newStrs.size() > 0) {for (int i = 0; i < newStrs.size(); i++) {write.append((String) newStrs.get(i));write.append(enter);}}st = write.toString();} catch (Exception e) {e.printStackTrace();} return st;} /**    * 删除该目录filePath下的所有文件    * @param filePath    *            文件目录路径    */   public static void deleteFiles(String filePath) {       File file = new File(filePath);       if (file.exists()) {           File[] files = file.listFiles();           for (int i = 0; i < files.length; i++) {               if (files[i].isFile()) {                   files[i].delete();               }           }       }   }    /**    * 删除单个文件    * @param filePath 文件目录路径    * @param fileName 文件名称    */   public static void deleteFile(String filePath, String fileName) {       File file = new File(filePath);       if (file.exists()) {           File[] files = file.listFiles();           for (int i = 0; i < files.length; i++) {               if (files[i].isFile()) {                   if (files[i].getName().equals(fileName)) {                       files[i].delete();                       return;                   }               }           }       }   }

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 蚂蚁借呗没有自动扣款怎么办 有对方qq号名字怎么办 腾讯模拟器刺激现场注册上限怎么办 丹阳智慧人社登入密码忘了怎么办? ipad系统被锁了怎么办 电脑管理员账号删了怎么办 自己电脑删文件需要管理员怎么办 苹果电脑管理员密码忘记了怎么办 电脑提示安全设置不允许下载怎么办 微信和ipad同步怎么办 苹果6空间已满怎么办 苹果6内存虚满怎么办 监控主机密码忘了怎么办 加购物车不下单怎么办 绑定qq账号消息不见了怎么办 现在的注册微信怎么办 爱奇艺手机号码被别人绑定了怎么办 手机号码换了支付宝账号怎么办 qq换手机号了怎么办呢 公司被注销了公众号怎么办 qq号被限制查找怎么办 qq号别人查找不到怎么办 qq邮箱已被注册怎么办 微信付款没网络怎么办 天猫买的假货店铺关门了怎么办 鞋小了半码怎么办 迅雷会员种子不能加速怎么办 迅雷会员为什么不能加速怎么办 持有st创智股票怎么办 租的房子床坏了怎么办 宜家定时器不响怎么办 新插座插不进去怎么办 本溪人社app打不开怎么办 南宁电车超过上牌时间怎么办 苹果6s降频怎么办 0首付手机还不起怎么办 乐才app登录不上怎么办 买了笔记本网要怎么办? 电脑连接不上网络怎么办 电脑上没网络了怎么办 手机返回键不好使怎么办