在Java中,你可以使用java.util.zip
包中的类来压缩文件夹。以下是一个示例代码,展示了如何压缩一个文件夹:
import java.io.*;
import java.nio.file.*;
import java.util.zip.*;
public class FolderGzip {
public static void main(String[] args) {
String folderToZip = "/path/to/folder";
String zipFilePath = "/path/to/output.zip";
try {
compressFolder(folderToZip, zipFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void compressFolder(String folderPath, String zipFilePath) throws IOException {
// 创建一个文件输出流,写入ZIP文件
FileOutputStream fos = new FileOutputStream(zipFilePath);
// 创建一个ZIP输出流,写入到文件输出流中
ZipOutputStream zos = new ZipOutputStream(fos);
// 获取文件夹中的所有文件和子文件夹
Path rootPath = Paths.get(folderPath);
Files.walk(rootPath)
.filter(path -> !Files.isDirectory(path))
.forEach(path -> {
try {
// 创建一个ZIP条目,使用相对路径
ZipEntry zipEntry = new ZipEntry(rootPath.relativize(path).toString());
zos.putNextEntry(zipEntry);
// 读取文件内容并将其写入ZIP输出流
try (InputStream fis = Files.newInputStream(path)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
zos.write(buffer, 0, bytesRead);
}
}
// 关闭ZIP条目,完成对该文件的压缩
zos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
});
// 关闭ZIP输出流和文件输出流
zos.close();
fos.close();
}
}
在这个示例中,compressFolder
方法接受要压缩的文件夹路径和输出的ZIP文件路径。它使用java.nio.file.Files.walk
方法遍历文件夹中的所有文件和子文件夹,并使用java.util.zip.ZipOutputStream
将它们添加到ZIP文件中。