java压缩多个文件

/**
   * 功能:压缩多个文件成一个zip文件
   * @param srcfile:源文件列表
   * @param zipfile:压缩后的文件
   */
  public static void zipFiles(File[] srcfile,File zipfile){
    byte[] buf=new byte[1024];
    try {
      //ZipOutputStream类:完成文件或文件夹的压缩
      ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipfile));
      for(int i=0;i<srcfile.length;i++){
        FileInputStream in=new FileInputStream(srcfile[i]);
        out.putNextEntry(new ZipEntry(srcfile[i].getName()));
        int len;
        while((len=in.read(buf))>0){
          out.write(buf,0,len);
        }
        out.closeEntry();
        in.close();
      }
      out.close();
      System.out.println("压缩完成.");
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  /**
   * 功能:解压缩
   * @param zipfile:需要解压缩的文件
   * @param descDir:解压后的目标目录
   */
  public static void unZipFiles(File zipfile,String descDir){
    try {
      ZipFile zf=new ZipFile(zipfile);
      for(Enumeration entries=zf.entries();entries.hasMoreElements();){
        ZipEntry entry=(ZipEntry) entries.nextElement();
        String zipEntryName=entry.getName();
        InputStream in=zf.getInputStream(entry);
        OutputStream out=new FileOutputStream(descDir+zipEntryName);
        byte[] buf1=new byte[1024];
        int len;
        while((len=in.read(buf1))>0){
          out.write(buf1,0,len);
        }
        in.close();
        out.close();
        System.out.println("解压缩完成.");
      }
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }

  /**功能:
   * @param args
   * https://zcmlccontract.zcmlc.com/expiredate/2018/20180709/hgypdf/temporary_dianzi_709e9d7465ac0f10.pdf
   * https://zcmlccontract.zcmlc.com/expiredate/2018/20180709/hgypdf/temporary_dianzi_648edb3bce2ecc0a.pdf
   */
  public static void main(String[] args) {
      cc();
      
    //2个源文件
    File f1=new File("e:\\test\\a.pdf");
    File f2=new File("e:\\test\\b.txt");
    File[] srcfile={f1,f2};
    //压缩后的文件
    File zipfile=new File("e:\\test\\c.zip");
   // TestZIP.zipFiles(srcfile, zipfile);
    //需要解压缩的文件
    File file=new File("D:\\workspace\\flexTest\\src\\com\\biao\\test\\biao.zip");
    //解压后的目标目录
    String dir="D:\\workspace\\flexTest\\src\\com\\biao\\test\\";
   // TestZIP.unZipFiles(file, dir);

  }

//将url内容转换为输入流

 private static InputStream aa(String wurl){
    try {
         URL    url = new URL(wurl);
         HttpURLConnection conn = (HttpURLConnection)url.openConnection();    
          //设置超时间为3秒  
          conn.setConnectTimeout(3*1000);  
          //防止屏蔽程序抓取而返回403错误  
          conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
          //得到输入流  
          InputStream inputStream = conn.getInputStream();
          return inputStream;
    } catch (Exception e) {
        e.printStackTrace();
    }   
    return null;
  }

//

    @RequestMapping(value = "zcmuserdata/{loanid}")
    public void userData(@PathVariable("loanid") String loanid,
            HttpServletRequest req,HttpServletResponse response) {
         try {
            
            List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
            ///
            //获取需要的资料信息
            //1.获取用户身份证正反面url
            AcLoanApplyInfo apply = loanInfoIService.queryLoanBasicInfo(loanid);
            if(apply!=null){
                RealNameAuthentication cardNo = realNameAuthenticationService.querByIdentiyCardNo(apply.getCustIdCard());
                if(cardNo!=null){
                    String ZCMFJURL = FileUtils.getValueByPropertiesKey("ZCMFJURL", "resource.properties");
                    String idcardimg1 = cardNo.getIdcardimg1();//身份证正面照片
                    String idcardimg2 = cardNo.getIdcardimg2();//身份证反面照片
                    list.add(aa(ZCMFJURL+idcardimg1,"idcardimg1.png"));
                    list.add(aa(ZCMFJURL+idcardimg2,"idcardimg2.png"));
                }
            }
            //2.获取活体照片
            String rurl = geturl(loanid,"R");
            if(!"".equals(rurl)){
                list.add(aa(rurl,"livingphoto.png"));
            }
            //3.获取购物信息(天猫或者京东)
            String tmurl = geturl(loanid,"ADD_TM");
            if(!"".equals(tmurl)){
                list.add(aa(tmurl,"tm.png"));
            }
            String jdurl = geturl(loanid,"ADD_JD");
            if(!"".equals(jdurl)){
                list.add(aa(jdurl,"jd.png"));
            }
            //流处理
            String fileName="userdata.zip";
            ZipOutputStream out=new ZipOutputStream(response.getOutputStream());
            // 中文文件名必须转码为 ISO8859-1,否则为乱码
            String fileNameDown = new String(fileName.getBytes(), "ISO8859-1");
            // 作为附件下载
            response.setHeader("Content-Disposition", "attachment;filename=" + fileNameDown);
            byte[] buf=new byte[1024];
            for (Map<String, Object> map2 : list) {
                 InputStream in=(InputStream) map2.get("in");
                    out.putNextEntry(new ZipEntry(map2.get("name").toString()));
                    int len;
                    while((len=in.read(buf))>0){
                      out.write(buf,0,len);
                    }
                    out.closeEntry();
                    in.close();
            }
            out.close();
            log.info("ZCMuserData >>>output success==loanid="+loanid);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Java调用Zip类批量压缩多个文件,此前有一个是压缩单个文件,也可参考,相关代码中可找到此源码。   public class ZipDemo extends JFrame{   JFileChooser fileChooser; //文件选择器   JList fileList; //待压缩文件列表   Vector files; //文件数据(待压缩文件)   JButton jbAdd; //增加文件按钮   JButton jbDelete; //删除文件按钮   JButton jbZip; //压缩按钮   JTextField target; //目标文件文本域   public ZipDemo(){   super("用ZIP压缩多个文件"); //调用父类构造函数   fileChooser=new JFileChooser(); //实例化文件选择器   files=new Vector(); //实例化文件数据Vector   fileList=new JList(files); //实例化已选择文件列表   jbAdd=new JButton("增加"); //实例化按钮组件   jbDelete=new JButton("删除");   jbZip=new JButton("压缩");   target=new JTextField(18);   JPanel panel=new JPanel(); //实例化面板,用于容纳按钮   panel.add(jbAdd); //增加组件到面板上   panel.add(jbDelete);   panel.add(jbZip);   JPanel panel2=new JPanel();   panel2.add(new JLabel("目标文件"));   panel2.add(target);   JScrollPane jsp=new JScrollPane(fileList);   Container container=getContentPane(); //得到容器   container.add(panel2,BorderLayout.NORTH); //增加组件到容器   container.add(jsp,BorderLayout.CENTER);   container.add(panel,BorderLayout.SOUTH);   jsp.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); //设置边界
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值