import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.zip.*;
public class ZipUtils {
public static void fileToZip(String url, String zipUrl, String zipName) {
String sourceFolderPath = url;
// 要打包的文件夹路径
String destinationFolderPath = zipUrl;
// ZIP文件放置的目标文件夹路径
String zipFileName = zipName; // ZIP文件名
// 创建目标文件夹
Path destinationFolder = Paths.get(destinationFolderPath);
try {
Files.createDirectories(destinationFolder);
} catch (IOException e) {
e.printStackTrace();
return;
}
// 压缩文件夹为ZIP
try (FileOutputStream fos = new FileOutputStream(destinationFolderPath + File.separator + zipFileName);
ZipOutputStream zos = new ZipOutputStream(fos)) {
// 递归地添加文件夹及其内容到ZIP文件
addFolderToZip(sourceFolderPath, Paths.get(sourceFolderPath).getFileName().toString(), zos);
System.out.println("文件夹已成功打包成ZIP文件!");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void addFolderToZip(String folderPath, String parentFolderName, ZipOutputStream zos) throws IOException {
File folder = new File(folderPath);
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
String subFolderName = parentFolderName + File.separator + file.getName();
addFolderToZip(file.getAbsolutePath(), subFolderName, zos);
} else {
addToZip(folderPath, parentFolderName, file, zos);
}
}
}
}
private static void addToZip(String folderPath, String parentFolderName, File file, ZipOutputStream zos) throws IOException {
try (FileInputStream fis = new FileInputStream(file)) {
String entryName = parentFolderName + File.separator + file.getName();
ZipEntry zipEntry = new ZipEntry(entryName);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
}
}