package com.moon.server.helper;
|
|
import net.lingala.zip4j.ZipFile;
|
import net.lingala.zip4j.exception.ZipException;
|
import net.lingala.zip4j.model.ZipParameters;
|
import net.lingala.zip4j.model.enums.AesKeyStrength;
|
import net.lingala.zip4j.model.enums.CompressionLevel;
|
import net.lingala.zip4j.model.enums.CompressionMethod;
|
import net.lingala.zip4j.model.enums.EncryptionMethod;
|
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.LogFactory;
|
|
import java.io.File;
|
import java.nio.charset.StandardCharsets;
|
|
/**
|
* Zip4j帮助类
|
* @author WWW
|
*/
|
public class Zip4jHelper {
|
private final static Log log = LogFactory.getLog(Zip4jHelper.class);
|
|
/**
|
* Zip压缩
|
*
|
* @param zipFile zip文件
|
* @param sourcePath 源路径
|
* @param pwd 密码
|
* @return 成功是否
|
*/
|
public static boolean zip(String zipFile, String sourcePath, String pwd) {
|
try {
|
ZipFile zip = StringHelper.isEmpty(pwd) ? new ZipFile(zipFile) : new ZipFile(zipFile, pwd.toCharArray());
|
zip.setCharset(StandardCharsets.UTF_8);
|
|
File f = zip.getFile();
|
if (!f.getParentFile().exists()) {
|
f.getParentFile().mkdirs();
|
}
|
if (f.exists()) {
|
f.delete();
|
}
|
|
ZipParameters params = getZipParams(!StringHelper.isEmpty(pwd));
|
|
// 要打包的文件或文件夹
|
File currentFile = new File(sourcePath);
|
if (currentFile.isDirectory()) {
|
zip.addFolder(currentFile, params);
|
} else {
|
zip.addFile(currentFile, params);
|
}
|
|
return true;
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
return false;
|
}
|
}
|
|
/**
|
* 创建ZipFile
|
*/
|
public static ZipFile createZipFile(String zipFile, String pwd) {
|
try {
|
ZipFile zip = StringHelper.isEmpty(pwd) ? new ZipFile(zipFile) : new ZipFile(zipFile, pwd.toCharArray());
|
// zip.setCharset(Charset.forName("GBK"))
|
zip.setCharset(StandardCharsets.UTF_8);
|
|
File f = zip.getFile();
|
if (!f.getParentFile().exists()) {
|
f.getParentFile().mkdirs();
|
}
|
if (f.exists()) {
|
f.delete();
|
}
|
|
return zip;
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
return null;
|
}
|
}
|
|
/**
|
* 获取ZipParameters
|
*/
|
public static ZipParameters getZipParams(boolean hasPwd) {
|
// 设置压缩文件参数
|
ZipParameters params = new ZipParameters();
|
// 压缩方式
|
params.setCompressionMethod(CompressionMethod.DEFLATE);
|
// 压缩级别
|
params.setCompressionLevel(CompressionLevel.MAXIMUM);
|
|
if (hasPwd) {
|
// 是否设置加密文件
|
params.setEncryptFiles(true);
|
// 设置AES加密强度:KEY_STRENGTH_256
|
params.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_128);
|
// 设置加密算法
|
params.setEncryptionMethod(EncryptionMethod.AES);
|
}
|
|
return params;
|
}
|
|
/**
|
* 添加文件至压缩包
|
*
|
* @param zip ZipFile
|
* @param params ZipParameters
|
* @param file File
|
* @throws ZipException
|
*/
|
private static void addZipFile(ZipFile zip, ZipParameters params, File file) throws ZipException {
|
if (file.isDirectory()) {
|
File[] files = file.listFiles();
|
for (File f : files) {
|
addZipFile(zip, params, f);
|
}
|
} else {
|
zip.addFile(file, params);
|
}
|
}
|
|
/**
|
* Zip解压
|
*
|
* @param zipFile zip文件
|
* @param toPath 解压路径
|
* @param password 密码
|
* @return 成功是/否
|
*/
|
public static boolean unzip(String zipFile, String toPath, String password) {
|
try {
|
// 生成的压缩文件
|
ZipFile zip = new ZipFile(zipFile);
|
|
// 设置密码
|
if (!StringHelper.isEmpty(password)) {
|
zip.setPassword(password.toCharArray());
|
}
|
|
// 解压缩所有文件以及文件夹
|
zip.extractAll(toPath);
|
|
return true;
|
} catch (Exception ex) {
|
log.error(ex.getMessage(), ex);
|
return false;
|
}
|
}
|
}
|