在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
,完成压缩操作。