- 一、zip4j简介
- 二、zip4j工具类使用步骤
- 1.添加maven依赖
- 2.工具类代码
- 3.调用测试
- 三、结语
一、zip4j简介
zip4j功能比较强大,支持加密、解密压缩,支持文件的添加、删除等。
zip4j官网:zip4j官网 - 可以在"download"页面下载官方示例进行学习
特征:
- 从 Zip 文件中创建、添加、提取、更新、删除文件
- 读/写受密码保护的 Zip 文件
- AES 128/256 加密/解密
- 标准 Zip 加密/解密
- Zip64 格式
- 存储(无压缩)和放气压缩方法
- 从 Split Zip 文件中创建或提取文件(例如:z01、z02、…zip)
- Unicode 文件名
- 进度监视器
二、zip4j工具类使用步骤 1.添加maven依赖
2.工具类代码net.lingala.zip4j zip4j1.3.2 org.projectlombok lombok1.18.16 org.apache.commons commons-lang33.7
package com.ctsi.dbbackup.core.util;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
public class ZipUtil {
public static void zipFile(String srcFilePath, String zipPathFileName, String password) {
try {
// 生成的压缩文件
ZipFile zipFile = new ZipFile(zipPathFileName);
ZipParameters parameters = new ZipParameters();
// 压缩级别
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if (StringUtils.isNotEmpty(password)) {
parameters.setEncryptFiles(true);
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword(password);
}
// 要打包的文件夹
File currentFile = new File(srcFilePath);
File[] fs = currentFile.listFiles();
if (Objects.isNull(fs) || fs.length == 0) {
throw new RuntimeException("文件夹下无任何文件...");
}
// 遍历文件夹下所有的文件、文件夹
for (File f : fs) {
if (f.isDirectory()) {
zipFile.addFolder(f.getPath(), parameters);
continue;
}
zipFile.addFile(f, parameters);
}
} catch (ZipException e) {
log.error("压缩文件【" + srcFilePath + "】到路径【" + zipPathFileName + "】失败:n" + e.getMessage());
throw new RuntimeException("压缩文件失败...");
}
}
public static void unZipFile(String zipFileFullName, String filePath, String password) {
try {
ZipFile zipFile = new ZipFile(zipFileFullName);
// 如果解压需要密码
if (StringUtils.isNotEmpty(password) && zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(filePath);
} catch (ZipException e) {
log.error("解压文件【" + zipFileFullName + "】到路径【" + filePath + "】失败:n" + e.getMessage());
throw new RuntimeException("解压文件失败...");
}
}
public static boolean addFilesToZip(String zipFullFileName, List fullFileNameList, String rootFolderInZip) {
try {
ZipFile zipFile = new ZipFile(zipFullFileName);
ArrayList addFiles = new ArrayList<>();
for (String fileName : fullFileNameList) {
addFiles.add(new File(fileName));
}
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if (StringUtils.isNotEmpty(rootFolderInZip)) {
if (!rootFolderInZip.endsWith(File.separator)) {
rootFolderInZip = rootFolderInZip + File.separator;
}
parameters.setRootFolderInZip(rootFolderInZip);
}
zipFile.addFiles(addFiles, parameters);
return true;
} catch (ZipException e) {
log.error("添加文件失败:n" + e.getMessage());
return false;
}
}
public static boolean deleteFileInZip(String zipFullFileName, String fileName) {
try {
ZipFile zipFile = new ZipFile(zipFullFileName);
zipFile.removeFile(fileName);
return true;
} catch (ZipException e) {
log.error("删除文件失败:n" + e.getMessage());
return false;
}
}
}
3.调用测试
- main方法
public static void main(String[] args) {
zipFile("E:/opt/aaa", "E:/opt/aaa/test.zip", "123456");
}
- 结果
- 解压需输入压缩时的密码
三、结语
以上便是笔者使用zip4j自行封装的常用方法。若有出入的地方, 欢迎博友们指正,笔者感激不尽!



