pom依赖
net.lingala.zip4j zip4j 2.9.1
ZipUtil.java
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import java.io.File;
public class ZipUtil {
public static void zip(String rootFolder, String zipFileTargetPath) throws Exception {
zip(new File(rootFolder), new File(zipFileTargetPath));
}
public static void zip(String rootFolder, String zipFileTargetPath, String password) throws Exception {
zip(new File(rootFolder), new File(zipFileTargetPath), password);
}
public static void zip(File rootFolder, File zipFileTargetPath) throws Exception {
verifyZipRootFolder(rootFolder);
try (ZipFile zipFile = new ZipFile(zipFileTargetPath);) {
for (File f : rootFolder.listFiles()) {
if (f.isFile()) {
zipFile.addFile(f);
} else if (f.isDirectory()) {
zipFile.addFolder(f);
}
}
}
}
public static void zip(File rootFolder, File zipFileTargetPath, String password) throws Exception {
if (password == null || password.isEmpty()) {
zip(rootFolder, zipFileTargetPath);
return;
}
verifyZipRootFolder(rootFolder);
// 压缩文件启用密码,加密算法采用AES
ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);
try (ZipFile zipFile = new ZipFile(zipFileTargetPath, password.toCharArray());) {
for (File f : rootFolder.listFiles()) {
if (f.isFile()) {
zipFile.addFile(f, zipParameters);
} else if (f.isDirectory()) {
zipFile.addFolder(f, zipParameters);
}
}
}
}
public static void unZip(String zipFilePath, String targetFolder) throws Exception {
unZip(new File(zipFilePath), targetFolder);
}
public static void unZip(String zipFilePath, String targetFolder, String password) throws Exception {
unZip(new File(zipFilePath), targetFolder, password);
}
public static void unZip(File zipFilePath, String targetFolder) throws Exception {
try (ZipFile zipFile = new ZipFile(zipFilePath);) {
zipFile.extractAll(targetFolder);
}
}
public static void unZip(File zipFilePath, String targetFolder, String password) throws Exception {
try (ZipFile zipFile = new ZipFile(zipFilePath);) {
if (zipFile.isEncrypted()) {
zipFile.setPassword(password.toCharArray());
}
zipFile.extractAll(targetFolder);
}
}
private static void verifyZipRootFolder(File rootFolder) {
if (!rootFolder.isDirectory()) {
throw new RuntimeException("压缩路径根目录必须是文件夹");
}
if (rootFolder.listFiles() == null) {
throw new NullPointerException("压缩路径根目录下没有文件");
}
}
}



