在 Java 中,可以使用 java.util.zip 包中的 ZipOutputStream 和 ZipEntry 类来压缩多级目录。以下是一个例子,展示如何递归地将一个目录及其所有子目录和文件压缩到一个 ZIP 文件中:
import java.io.*;
import java.nio.file.*;
import java.util.zip.*;
public class ZipDirectory {
public static void main(String[] args) throws IOException {
String sourceDirPath = "path/to/source/directory";
String zipFilePath = "path/to/output.zip";
try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
Path sourceDir = Paths.get(sourceDirPath);
Files.walk(sourceDir)
.filter(path -> !Files.isDirectory(path))
.forEach(path -> {
ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString());
try {
zipOut.putNextEntry(zipEntry);
Files.copy(path, zipOut);
zipOut.closeEntry();
} catch (IOException e) {
System.err.println("Failed to add file to ZIP: " + path);
e.printStackTrace();
}
});
}
}
}
这个程序将遍历指定目录(包括子目录)的所有文件,并将它们添加到 ZIP 文件中。以下是步骤解析:
- 使用 Files.walk 方法递归遍历源目录。
- 对于每个非目录文件,创建一个相对路径的 ZipEntry。
- 将文件内容复制到 ZipOutputStream。
请根据实际情况替换 sourceDirPath 和 zipFilePath。此外,请确保适当处理异常并关闭资源以避免资源泄漏。