java通过zip压缩文件夹

private void startDownFile(List<Map<String, Object>> list){
        Date date = new Date();
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         String riqi = format.format(date);
         String filename = "附件_"+riqi+".zip";
         String FilePath = read.getConfig("filePath");
         byte[] buffer = new byte[1024];    
         String strZipPath = FilePath + filename;
         try {
             List<File> files = new ArrayList<File>();
             List<String> nameList=new ArrayList<String>();
             ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath));             
              for(int i =0;i<list.size();i++){
                 String fpath = (String) list.get(i).get("wj_path").toString();
                 String showName = (String) list.get(i).get("wj_showname").toString();                 
                 File f = new File(fpath);
                 if(f.exists()){
                     files.add(f);
                     nameList.add(showName);
                 }
             }                  
             for(int j=0;j<files.size();j++){            
                 // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字
                 out.putNextEntry(new ZipEntry(nameList.get(j)+"\\"+files.get(j).getName())); 
                 // 读入需要下载的文件的内容,打包到zip文件   
                 FileInputStream fis = new FileInputStream(files.get(j));                
                 int len;                    
                 while ((len = fis.read(buffer)) > 0) {    
                     out.write(buffer, 0, len);    
                 }    
                 out.closeEntry();    
                 fis.close(); 
             }
             out.close();    
        } catch (Exception e) {
            e.printStackTrace();
        }
         File file = new File(strZipPath);
         downMainFile(this.getResponse(), file, filename);
    }



private void downMainFile(HttpServletResponse response,File file,String name) {
        try {
                InputStream ins = new FileInputStream(file);
                BufferedInputStream bins = new BufferedInputStream(ins);
                OutputStream outs = response.getOutputStream();
                BufferedOutputStream bouts = new BufferedOutputStream(outs);    
                response.setContentType("application/x-download");// 设置response内容的类型    
                response.setHeader(    
                        "Content-disposition",    
                        "attachment;filename="+ URLEncoder.encode(name, "UTF-8"));// 设置头部信息    
                int bytesRead = 0;    
                byte[] buffer = new byte[8192];    
                // 开始向网络传输文件流    
                while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {    
                    bouts.write(buffer, 0, bytesRead);    
                }    
                bouts.flush();// 这里一定要调用flush()方法    
                ins.close();    
                bins.close();    
                outs.close();    
                bouts.close();  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值