java 将目录下文件打包成zip,并将zip文件放置到当前目录下工具类

java 将目录下文件打包成zip,并将zip文件放置到当前目录下工具类


import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author dume
 * @ClassName ZIPUtils
 * @description: 文件夹压缩成zip
 * @date 2024年07月12日
 * @version: 1.0
 */
public class ZIPUtils {
    /**
     * 创建zip压缩包
     * @param zipFilePath 压缩包文件路径
     * @param resourcePath 进行压缩的文件路径
     */
    public static File createZip(String zipFilePath, String resourcePath) throws IOException {
        //首先获取文件路径下的所有文件的list(包含子文件夹下的)
        List<File> files = getFileList(new File(resourcePath));

        //判断压缩包路径中有无同名压缩包,有则删除
        File zip = new File(zipFilePath);
        if (zip.exists()) {
            zip.delete();
        }

        //创建压缩包文件
        zip.createNewFile();

        FileOutputStream output = new FileOutputStream(zip);
        ZipOutputStream zipOut = new ZipOutputStream(output);
        //遍历文件List
        for (File file : files) {
            FileInputStream input = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(input);
            //从file的路径中截取掉resourcePath,只留下相对的地址,是为了让生成的压缩包的文件层级与resourcePath内一致
            ZipEntry zipEntry = new ZipEntry(file.getPath().substring(resourcePath.length()));
            zipOut.putNextEntry(zipEntry);
            int num;
            byte[] buffer = new byte[512];
            while ((num = bufferedInputStream.read(buffer)) != -1) {
                zipOut.write(buffer, 0, num);
            }
            bufferedInputStream.close();
            input.close();
        }
        zipOut.close();
        output.close();
        return zip;
    }

    /**
     * 获取文件夹下的所有文件列表
     * @param file 文件夹的File
     */
    public static List<File> getFileList(File file){
        List<File> fileList = new LinkedList<>();
        File[] files = file.listFiles();
        for (File f : files) {
            //如果是目录,则递归调用本方法
            if (f.isDirectory()){
                fileList.addAll(getFileList(f));
            } else {
                fileList.add(f);
            }
        }

        return fileList;
    }

    public static void main(String[] args) throws Exception {
        //这里必须使用File.separator来分隔,以避免不同操作系统因默认分隔符不同而报错
        String zipPath = "C:" + File.separator + "test" + File.separator + "1.zip";
        String filePath = "C:" + File.separator + "test" + File.separator;
        createZip(zipPath, filePath);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小七蒙恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值