网站推广全过程,无锡网站制作需要多少钱,中国工商注册网官网网址,郑州做网站公最近项目中有个需求需要对文件夹进行压缩后传输#xff0c;考虑数据泄露安全性问题#xff0c;需要对压缩包进行加密#xff0c;特地查找了下开源压缩加密类库#xff0c;找到了Java语言开发的zip4j库#xff0c;觉得挺好用的#xff0c;在这分享给大家#xff01;
Jav… 最近项目中有个需求需要对文件夹进行压缩后传输考虑数据泄露安全性问题需要对压缩包进行加密特地查找了下开源压缩加密类库找到了Java语言开发的zip4j库觉得挺好用的在这分享给大家
Java项目引入使用步骤如下
1、引入maven依赖 dependency groupIdnet.lingala.zip4j/groupId artifactIdzip4j/artifactId version2.11.5/version /dependency 2、封装的工具类 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.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.ArrayList; import java.util.List; /** * desc zip解压缩工具 * author: wcy * date: 2024/1/12 * version: 1.0 */ public class ZipUtil { private static final Logger log LoggerFactory.getLogger(ZipUtil.class); /** * 压缩指定路径的文件 * param srcFilePath 待压缩文件路径 * param zipPathFileName zip文件全路径名 * param password 加密密码 * return */ public static boolean zipFile(String srcFilePath, String zipPathFileName, String password){ try { // 生成的压缩文件 ZipFile zipFile new ZipFile(zipPathFileName); if (StringUtils.isNotEmpty(password)) { zipFile.setPassword(password.toCharArray()); } ZipParameters parameters new ZipParameters(); // 压缩级别 parameters.setCompressionMethod(CompressionMethod.DEFLATE); parameters.setCompressionLevel(CompressionLevel.NORMAL); if(StringUtils.isNotEmpty(password)){ parameters.setEncryptFiles(true); parameters.setEncryptionMethod(EncryptionMethod.AES); parameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); } // 要打包的文件夹 File file new File(srcFilePath); if (file.isDirectory()) { zipFile.addFolder(file, parameters); } else { zipFile.addFile(file, parameters); } return true; } catch (ZipException e) { e.printStackTrace(); log.error(压缩文件【srcFilePath】到路径【zipPathFileName】失败\ne.getMessage()); return false; } } /** * param zipFileFullName zip文件所在的路径名 * param filePath 解压到的路径 * param password 需要解压的密码 * return */ public static boolean unZipFile(String zipFileFullName, String filePath, String password) { try { ZipFile zipFile new ZipFile(zipFileFullName); // 如果解压需要密码 if(StringUtils.isNotEmpty(password) zipFile.isEncrypted()) { zipFile.setPassword(password.toCharArray()); } zipFile.extractAll(filePath); return true; } catch (ZipException e) { e.printStackTrace(); log.error(解压文件【zipFileFullName】到路径【filePath】失败\ne.getMessage()); return false; } } /** * 添加文件到压缩文件中 * param zipFullFileName zip文件所在路径及全名 * param fullFileNameList 待添加的文件全路径集合 * param rootFolderInZip 在压缩文件里的文件夹名 * return */ public static boolean addFilesToZip(String zipFullFileName, ListString fullFileNameList, String rootFolderInZip) { try { ZipFile zipFile new ZipFile(zipFullFileName); ArrayListFile addFiles new ArrayList(); for (String fileName : fullFileNameList) { addFiles.add(new File(fileName)); } ZipParameters parameters new ZipParameters(); parameters.setCompressionMethod(CompressionMethod.DEFLATE); parameters.setCompressionLevel(CompressionLevel.NORMAL); if(StringUtils.isNotEmpty(rootFolderInZip)){ if(!rootFolderInZip.endsWith(/)){ rootFolderInZip rootFolderInZip/; } parameters.setRootFolderNameInZip(rootFolderInZip); } zipFile.addFiles(addFiles, parameters); return true; } catch (ZipException e) { e.printStackTrace(); log.error(添加文件失败\ne.getMessage()); return false; } } /** * 从压缩文件中删除路径 * param zipFullFileName * param fileName * return */ public static boolean deleteFileInZip(String zipFullFileName, String fileName) { try { ZipFile zipFile new ZipFile(zipFullFileName); zipFile.removeFile(fileName); return true; } catch (ZipException e) { e.printStackTrace(); log.error(删除文件失败\ne.getMessage()); return false; } } public static void main(String[] args) throws ZipException { String srcFilePath C:\\Users\\test\\Desktop\\project\\video; String desFilePath C:\\Users\\test\\Desktop\\project\\file; String zipPathFileName C:\\Users\\test\\Desktop\\project\\video.zip; String password ; long begin System.currentTimeMillis(); boolean zipResult zipFile(srcFilePath, zipPathFileName, password); long end System.currentTimeMillis(); System.out.println(压缩结果 zipResult ,耗时 (end - begin) ms); boolean unZipResult unZipFile(zipPathFileName, desFilePath, password); long end2 System.currentTimeMillis(); System.out.println(解压结果 unZipResult ,耗时 (end2 - end) ms); System.out.println(unZipResult); } } 3、测试结果 压缩结果true,耗时3281ms 解压结果true,耗时590ms