温馨提示×

java如何压缩多个文件夹

小亿
100
2024-09-13 15:24:58
栏目: 编程语言

在Java中,可以使用java.util.zip包中的类和方法来压缩多个文件夹。以下是一个示例代码,演示了如何将多个文件夹压缩成一个ZIP文件:

import java.io.*;
import java.nio.file.*;
import java.util.zip.*;

public class ZipMultipleFolders {
    public static void main(String[] args) {
        // 要压缩的文件夹路径列表
        String[] folderPaths = {"path/to/folder1", "path/to/folder2"};
        
        // 输出的ZIP文件路径
        String outputZipFilePath = "path/to/output.zip";
        
        try {
            zipMultipleFolders(folderPaths, outputZipFilePath);
        } catch (IOException e) {
            System.err.println("Error while zipping folders: " + e.getMessage());
        }
    }

    private static void zipMultipleFolders(String[] folderPaths, String outputZipFilePath) throws IOException {
        try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(outputZipFilePath))) {
            for (String folderPath : folderPaths) {
                Path folder = Paths.get(folderPath);
                Files.walkFileTree(folder, new SimpleFileVisitor<Path>() {
                    @Override
                    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                        // 获取相对于压缩根目录的文件路径
                        String relativePath = folder.relativize(file).toString();
                        // 创建ZIP条目并写入文件数据
                        zipOut.putNextEntry(new ZipEntry(relativePath));
                        Files.copy(file, zipOut);
                        zipOut.closeEntry();
                        return FileVisitResult.CONTINUE;
                    }
                });
            }
        }
    }
}

这个示例代码首先定义了要压缩的文件夹路径列表和输出的ZIP文件路径。然后,它调用zipMultipleFolders方法来执行压缩操作。

zipMultipleFolders方法接受两个参数:一个是要压缩的文件夹路径列表,另一个是输出的ZIP文件路径。方法内部,我们创建一个ZipOutputStream实例,用于将文件写入ZIP文件。

接下来,我们遍历每个文件夹路径,并使用Files.walkFileTree方法遍历文件夹中的所有文件。对于每个文件,我们计算其相对于压缩根目录的路径,并创建一个ZipEntry实例。然后,我们将文件数据写入ZipOutputStream,并关闭当前ZIP条目。

最后,我们关闭ZipOutputStream,完成压缩操作。

0