多文件压缩为zip和解压

 

public class ZipFileUtil {

    /**
     * 压缩文件为zip
     *
     * @return java.io.File
     * @Author hl1314
     * @Date 11:48 2019-07-22
     * @Param [sourceDir, zipFilePath]
     **/
    public static File doZip(String sourceDir, String zipFilePath) throws IOException {
        File file = new File(sourceDir);
        File zipFile = new File(zipFilePath);
        return doZip(file, zipFile);
    }

    /**
     * 压缩文件为zip
     *
     * @return java.io.File
     * @Author hl1314
     * @Date 11:48 2019-07-22
     * @Param [sourceDir, zipFilePath]
     **/
    public static File doZip(File file, File zipFile) throws IOException {
        // 创建写出流操作
        try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)))) {

            String basePath = null;
            // 获取目录
            if (file.isDirectory()) {
                basePath = file.getPath();
            } else {
                basePath = file.getParent();
            }

            zipFile(file, basePath, zos);
        }

        return zipFile;
    }

    /**
     * @param source   源文件
     * @param basePath
     * @param zos
     */
    private static void zipFile(File source, String basePath, ZipOutputStream zos) throws IOException {
        File[] files = null;
        if (source.isDirectory()) {
            files = source.listFiles();
        } else {
            files = new File[1];
            files[0] = source;
        }

        InputStream is = null;
        String pathName;
        byte[] buf = new byte[1024];
        int length = 0;
        try {
            for (File file : files) {
                pathName = file.getPath().substring(basePath.length() + 1);
                if (file.isDirectory()) {
                    pathName = pathName + "/";
                    zos.putNextEntry(new ZipEntry(pathName));
                    zipFile(file, basePath, zos);
                } else {
                    is = new FileInputStream(file);
                    BufferedInputStream bis = new BufferedInputStream(is);
                    zos.putNextEntry(new ZipEntry(pathName));
                    while ((length = bis.read(buf)) > 0) {
                        zos.write(buf, 0, length);
                    }
                }
            }
        } finally {
            if (is != null) {
                is.close();
            }
        }

    }

    /**
     * 解压zip文件
     *
     * @return java.util.Map<java.lang.String, byte [ ]>
     * @Author hl1314
     * @Date 17:09 2019-07-22
     * @Param [inputStream]
     **/
    public static Map<String, byte[]> uncompress(InputStream inputStream) throws IOException {
        ZipInputStream zis = new ZipInputStream(inputStream);
        Map<String, byte[]> map = new HashMap<>(1);
        ZipEntry ze;
        byte[] buffer;
        while (((ze = zis.getNextEntry()) != null) && !ze.isDirectory()) {
            String name = ze.getName();
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            buffer = new byte[1024];
            int length;
            while ((length = zis.read(buffer, 0, buffer.length)) > -1) {
                byteArrayOutputStream.write(buffer, 0, length);
            }
            map.put(name, byteArrayOutputStream.toByteArray());
            byteArrayOutputStream.close();
        }
        zis.close();
        return map;
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值