工具类2:用java进行多文件压缩为一个ZIP包

用java将数据压缩为一个ZIP包

1:多文件压缩为一个zip

接口使用:zipFileName为输出zip包的名字,infile为需要压缩的多个文件存放的目录,

  public void zip(String zipFileName,String inFile) throws FileNotFoundException {
        ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
        BufferedOutputStream bo = new BufferedOutputStream(zipOutputStream);
        File file = new File(inFile);
        if (file.isDirectory()){//递归遍历文件
            File[] files = file.listFiles();
            for (File f : files) {
                    zip(zipFileName,f.toString());
            }
        }else {//进行文件压缩
            try {
                //创建文件的压缩点
                zipOutputStream.putNextEntry(new ZipEntry(file.getName()));
                //构建输入流
                FileInputStream fileInputStream = new FileInputStream(file);
                BufferedInputStream inputStream = new BufferedInputStream(fileInputStream);
                int a;
                //inputStream.read()获取字节信息
                while ((a=inputStream.read())!=-1){
                    bo.write(a);//字节流写入
                }
                //进行流的关闭
                inputStream.close();
                fileInputStream.close();
                bo.flush();
                zipOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

2:将字节数组存为zip文件

map<file,byte[]>:key是文件名,value是该文件的内容,可以利用字节流将内容读取为字节

public static boolean saveToZip(Map<String, byte[]> map) throws IOException {
        Iterator iterator = map.keySet().iterator();
        boolean flag = false;
        //zippath:zip输出路径
        if (!(zipPath.endsWith(File.separator))) {
            zipPath = zipPath + File.separator;
        }
        File file = new File(zipPath);
        if (!file.exists()) {
            file.mkdirs();
            LOG.info("mkdir zippath success");
        }
        String zipname = "";
        while (iterator.hasNext()) {
            String fileName = iterator.next().toString();
            if (fileName.contains(".bcp")) {
                String[] split = fileName.split(".bcp");
                zipname = zipPath + split[0] + ".zip.ing";
            }
        }
        ZipOutputStream out = null;
        BufferedOutputStream bo = null;
        try {
            out = new ZipOutputStream(new FileOutputStream(zipname));
            bo = new BufferedOutputStream(out);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Iterator<String> iterator1 = map.keySet().iterator();
        boolean b = iterator1.hasNext();
        System.out.println(b);
        while (iterator1.hasNext()) {
            String s = iterator1.next().toString();
            out.putNextEntry(new ZipEntry(s));
            bo.write(map.get(s));
            // 输入流关
            bo.flush();
        }
        bo.close();
        out.close();
        LOG.info("zip file success:" + zipname);
        rename(zipname);
        return flag;
    }
   private static void rename(String filename) {

        File file = new File(filename);
        if (file.exists() && filename.endsWith(".ing")) {
            String[] split = filename.split(".ing");
            String newZipName = split[0];
            File file1 = new File(newZipName);
            if (file1.exists()) {
                file.delete();
                return;
            }
            try {
                FileUtils.moveFile(file, new File(newZipName));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值