简单的API调用,直接贴代码
package com.utils.ZipUtils.zip4j;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
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.checkerframework.checker.nullness.qual.Nullable;
import org.springframework.util.StringUtils;
import java.io.File;
import java.util.List;
public class Zip4jUtils {
// 加密压缩的设置参数
private static final ZipParameters zipParameters = new ZipParameters();
static {
//设置压缩方式
zipParameters.setCompressionMethod(CompressionMethod.DEFLATE);
// 设置压缩级别
zipParameters.setCompressionLevel(CompressionLevel.HIGHER);
// 加密方式
zipParameters.setEncryptionMethod(EncryptionMethod.AES);
//设置aes加密强度
zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);
}
/**
* 指定输出文件、密码
* @param zipPath 压缩文件路径
* @param pwd 密码
* @return
*/
public static ZipFile createZip(String zipPath , String pwd){
if (StringUtils.hasText(pwd)){
zipParameters.setEncryptFiles(true); // 开启加密
return new ZipFile(zipPath, pwd.toCharArray());
}
zipParameters.setEncryptFiles(false); // 关闭加密
return new ZipFile(zipPath);
}
/**
* 压缩单个文件
* @param file 待压缩文件
* @param zipPath 压缩文件路径
* @param pwd 密码
*/
public static void addFile(String file , String zipPath , String pwd){
try {
createZip(zipPath,pwd).addFile(file,zipParameters);
} catch (ZipException e) {
e.printStackTrace();
}
}
/**
* 压缩单个文件
* @param file 待压缩文件
* @param zipPath 压缩文件路径
*/
public static void addFile(String file , String zipPath){
try {
addFile(file,zipPath,null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩多个文件
* @param files 待压缩文件路径集合
* @param zipPath 压缩文件路径
* @param pwd 秘钥
* @param splitLength 分隔限制 1024 * 1024 = 1M
*/
public static void addFiles(List<String> files , String zipPath , String pwd , int splitLength) {
List<File> fileList = Lists.transform(files, new Function<String, File>() {
@Nullable
@Override
public File apply(@Nullable String s) {
return new File(s);
}
});
try {
if (splitLength<=0){
//直接压缩
createZip(zipPath,pwd).addFiles(fileList,zipParameters);
}else {
//分层压缩,每超过某个大小限制,生成一个压缩文件
createZip(zipPath,pwd).createSplitZipFile(fileList, zipParameters, true, splitLength);
}
} catch (ZipException e) {
e.printStackTrace();
}
}
/**
* 压缩多个文件
* @param files
* @param zipPath
*/
public static void addFiles(List<String> files , String zipPath){
try {
addFiles(files,zipPath,null,0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩多个文件
* @param files
* @param zipPath
* @param pwd
*/
public static void addFiles(List<String> files , String zipPath , String pwd){
try {
addFiles(files,zipPath,pwd,0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩多个文件
* @param files
* @param zipPath
* @param splitLength
*/
public static void addFiles(List<String> files , String zipPath , int splitLength){
try {
addFiles(files,zipPath,null,splitLength);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩文件夹
* @param folderPath 待压缩文件夹
* @param zipPath 压缩文件路径
* @param pwd 秘钥
* @param splitLength 分隔限制 1024 * 1024 = 1M
*/
public static void addFolder(String folderPath , String zipPath , String pwd ,int splitLength){
try {
if (splitLength<=0){
//直接压缩
createZip(zipPath,pwd).addFolder(new File(folderPath),zipParameters);
}else {
//分层压缩,每超过某个大小限制,生成一个压缩文件
createZip(zipPath,pwd).createSplitZipFileFromFolder(new File(folderPath), zipParameters, true, splitLength);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩文件夹
* @param folderPath
* @param zipPath
*/
public static void addFolder(String folderPath , String zipPath){
try {
addFolder(folderPath,zipPath,null,0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩文件夹
* @param folderPath
* @param zipPath
* @param pwd
*/
public static void addFolder(String folderPath , String zipPath , String pwd){
try {
addFolder(folderPath,zipPath,pwd,0);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 压缩文件夹
* @param folderPath
* @param zipPath
* @param splitLength
*/
public static void addFolder(String folderPath , String zipPath , int splitLength){
try {
addFolder(folderPath,zipPath,null,splitLength);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解压
* @param releasePath 解压路径
* @param zipPath 压缩文件路径
* @param pwd 秘钥
*/
public static void releaseZip(String releasePath , String zipPath , String pwd){
try {
createZip(zipPath,pwd).extractAll(releasePath);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解压
* @param releasePath 解压路径
* @param zipPath 压缩文件路径
*/
public static void releaseZip(String releasePath , String zipPath){
try {
releaseZip(releasePath,zipPath,null);
} catch (Exception e) {
e.printStackTrace();
}
}
}