在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
,完成壓縮操作。