JAVA生成压缩包 的同时在创建一层文件夹

前言:在Java开发中,有时候我们需要将一些文件或文件夹打包成zip压缩包,以便运输或存储。而有时候,我们还需要在压缩包内创建文件夹来存放不用的文件类型,本文将提供给用户打包压缩包同时提供,创建一层文件夹的方法; 话不多说 上干货;

 


/**
 * @author: xy
 * @date: 2024/06/07
 * @des: 压缩目标文件时多创一层文件夹
 */
@Slf4j
public class ZipFiles {
    /**
     *
     * @param files 文件夹列表
     * @param zipFileName 输出ZIP文件的路径
     * @param folderInZip 在ZIP文件中创建的文件夹名称
     * @throws IOException
     */
    public static void zipFiles(File[] files, String zipFileName, String folderInZip) throws IOException {
        try (
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFileName));
                ZipOutputStream zos = new ZipOutputStream(bos)
        ) {
            for (File file : files) {
                // 创建ZIP中的新目录(如果需要)
                String filePathInZip = folderInZip + "/" + file.getName();
                ZipEntry zipEntry = new ZipEntry(filePathInZip);
                zos.putNextEntry(zipEntry);
 
                // 读取文件内容并写入ZIP文件
                try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = bis.read(buffer)) != -1) {
                        zos.write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }

    public static void zipFiles2(List<VideoFileDTO> videoNames, String zipFileName, String folderInZip) throws IOException {
        try (
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFileName));
                ZipOutputStream zos = new ZipOutputStream(bos)
        ) {
            for (VideoFileDTO videoName : videoNames) {
                // 创建ZIP中的新目录(如果需要)
                String filePathInZip = folderInZip + "/" + videoName.getName();
                ZipEntry zipEntry = new ZipEntry(filePathInZip);
                zos.putNextEntry(zipEntry);

                // 读取文件内容并写入ZIP文件
                try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(videoName.getFile()))) {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = bis.read(buffer)) != -1) {
                        zos.write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }

    /**
     *
     * @param videoNames 目标文件地址和需要生成的文件名
     * @param zipFileName 压缩包生成地址
     * @param folderInZip 需要添加的压缩文件夹名
     * @throws IOException
     */
    public static void zipFiles3(List<VideoNameDTO> videoNames, String zipFileName, String folderInZip) throws IOException {
        log.info("------------------  start compressed video");
        try (
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipFileName));
                ZipOutputStream zos = new ZipOutputStream(bos)
        ) {
            for (VideoNameDTO videoName : videoNames) {
                // 创建ZIP中的新目录(如果需要)
                String filePathInZip = folderInZip + "/" + videoName.getName();
                ZipEntry zipEntry = new ZipEntry(filePathInZip);
                zos.putNextEntry(zipEntry);

                // 读取文件内容并写入ZIP文件
                try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(videoName.getVideoUrl())))) {
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    while ((bytesRead = bis.read(buffer)) != -1) {
                        zos.write(buffer, 0, bytesRead);
                    }
                }
            }
        }
        log.info("------------------  compressed video end");
    }

/*    public static void main(String[] args) throws IOException {
        // 待压缩的文件列表
 *//*       File[] files = {new File("D:/fastdfsfile/test1.mp4"), new File("D:/fastdfsfile/test2.mp4")};
        // 输出ZIP文件的路径
        String zipFileName = "D:/fastdfsfile/archive.zip";
        // 在ZIP文件中创建的文件夹名称
        String folderInZip = "myfolder";
 
        zipFiles(files, zipFileName, folderInZip);*//*

        List<VideoNameDTO> videoNames = new ArrayList<>();

        for (int i = 0; i < 6; i++) {
            VideoNameDTO videoNameDTO = new VideoNameDTO();
            videoNameDTO.setName("test"+(i+1)+".mp4");
           // videoNameDTO.setFile(new File("D:/fastdfsfile/test"+(i+1)+".mp4"));
            videoNameDTO.setVideoUrl("D:/fastdfsfile/test"+(i+1)+".mp4");
            videoNames.add(videoNameDTO);
        }

        String zipFileName = "D:/fastdfsfile/测试22.zip";
        // 在ZIP文件中创建的文件夹名称
        String folderInZip = "mmqqq";

        zipFiles3(videoNames, zipFileName, folderInZip);
    }*/
}

如果有帮助,请点个赞吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值