java提供的压缩方法压缩文件夹(可以包含多个子文件夹)

直接复制过来用就行

public class EEETest {


    public static void main(String[] args) throws FileNotFoundException {
        String basePath = "";
        String directoryName = "D:/DLL/d067f03f-840a-4462-9d67-045ff3960806/40";
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("E://test.zip"));
        zipDir(directoryName,zos,basePath);
    }


    public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) {

        /**
         * 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。
         * @param directoryName 文件夹路径
         * @param zos           压缩流 ZipOutputStream 确定压缩包生成的位置
         * @param basePath      用于传给 ZipEntry 用于压缩包分文件夹第一级传入可以为""
         * @throws IOException
         */

        File file = new File(directoryName);
        // 每一级别的递归 basePath 不应该被改变所以添加一个 参数 copyBasePath
        String copyBasePath ="";
        if (file.exists()) {
            File[] fileList = file.listFiles();
            for (File f : fileList) {
                if (f.isDirectory()) {
                    // 拼接文件夹目录
                    if (!"".equals(basePath)) {
                        copyBasePath = basePath+ File.separator+f.getName();
                    } else {
                        copyBasePath = f.getName();
                    }
                    // 继续递归文件夹
                    zipDir(directoryName + File.separator + f.getName(), zos, copyBasePath);
                } else {
                    // 压缩单个文件到 zos
                    String zipName;
                    if (!"".equals(basePath)) {
                        zipName = basePath + File.separator + f.getName();
                    } else {
                        zipName = f.getName();
                    }
                    try {
                        // zos.putNextEntry  开始添加压缩文件  ZipEntry传入的参数 zipName如果包含了层级关系就会生成文件夹
                        zos.putNextEntry(new ZipEntry(zipName));
                        int len;
                        FileInputStream is = new FileInputStream(f);
                        byte[] bytes = new byte[1024];
                        while ((len = is.read(bytes)) != -1) {
                            zos.write(bytes, 0, len);
                        }
                        zos.flush();
                        // zos.closeEntry()   结束当前压缩文件的添加
                        zos.closeEntry();
                        is.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            try {
                zos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值