在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文件中。