news 2026/9/2 20:16:38

java使用net.lingala.zip4j导出压缩包文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java使用net.lingala.zip4j导出压缩包文件

java使用net.lingala.zip4j导出压缩包文件

      • 一、先确认依赖(Maven/Gradle)
      • 二、完整实现代码
      • 三、zip4j 1.x 核心配置说明(区别于2.x)
      • 四、关键问题解决
        • 1. AES-256 加密权限问题(JDK8及以下)
        • 2. 中文文件名乱码
        • 3. 文件夹删除失败
        • 4. 压缩包覆盖问题
      • 五、使用注意

以下是基于 zip4j 1.x 版本实现「加密压缩指定文件夹 + 压缩后删除原文件夹」的完整代码,兼容旧版依赖,同时解决加密、中文乱码、文件夹删除等核心问题:

一、先确认依赖(Maven/Gradle)

zip4j 1.x 最新稳定版为1.3.2,需在pom.xml中引入:

<!-- zip4j 1.x 依赖(对应 core.ZipFile) --><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version></dependency>

二、完整实现代码

importnet.lingala.zip4j.core.ZipFile;importnet.lingala.zip4j.exception.ZipException;importnet.lingala.zip4j.model.ZipParameters;importnet.lingala.zip4j.util.Zip4jConstants;importjava.io.File;importjava.util.Arrays;/** * 基于 zip4j 1.x(core.ZipFile)实现加密压缩文件夹并删除原文件夹 */publicclassZipEncryptUtil1x{/** * 加密压缩指定文件夹 * @param sourceDirPath 待压缩文件夹路径(如 D:\test\source) * @param zipFilePath 压缩包保存路径(如 D:\test\source_encrypt.zip) * @param password 压缩包加密密码 * @throws ZipException 压缩相关异常 */publicstaticvoidencryptCompressDir(StringsourceDirPath,StringzipFilePath,Stringpassword)throwsZipException{// 1. 校验源文件夹合法性FilesourceDir=newFile(sourceDirPath);if(!sourceDir.exists()||!sourceDir.isDirectory()){thrownewIllegalArgumentException("源文件夹不存在或非合法目录:"+sourceDirPath);}// 2. 初始化压缩参数(加密+压缩配置)ZipParameterszipParams=newZipParameters();// 压缩算法:DEFLATE(平衡压缩率和速度),STORE 为无压缩仅打包zipParams.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);// 压缩级别:0(最快)~9(最高压缩率),5为默认平衡值zipParams.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);// 开启加密zipParams.setEncryptFiles(true);// 加密方式:AES-256(推荐,比ZIP2.0更安全)zipParams.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);// AES密钥强度:256位(需JDK支持无限制加密策略)zipParams.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);// 设置压缩包密码zipParams.setPassword(password.toCharArray());// 解决中文文件名乱码(1.x 版本需手动指定字符集)zipParams.setFileNameCharset("UTF-8");// 3. 创建压缩包并添加整个文件夹(保留目录结构)ZipFilezipFile=newZipFile(zipFilePath);// 添加文件夹到压缩包,自动递归包含所有子文件/子目录zipFile.addFolder(sourceDir,zipParams);System.out.println("加密压缩完成,压缩包路径:"+zipFilePath);// 4. 压缩完成后删除原文件夹(递归删除)booleandeleteSuccess=deleteDirectory(sourceDir);if(deleteSuccess){System.out.println("原文件夹已删除:"+sourceDirPath);}else{System.err.println("原文件夹删除失败(可能文件被占用):"+sourceDirPath);}}/** * 递归删除文件夹(包含所有子文件/子目录) * @param dir 待删除的文件夹 * @return 是否删除成功 */privatestaticbooleandeleteDirectory(Filedir){if(dir.isDirectory()){File[]children=dir.listFiles();// 空文件夹直接删除if(children==null||children.length==0){returndir.delete();}// 递归删除所有子文件/子目录for(Filechild:children){booleansuccess=child.isDirectory()?deleteDirectory(child):child.delete();if(!success){returnfalse;}}}// 最后删除空文件夹returndir.delete();}// 测试示例publicstaticvoidmain(String[]args){try{// 待压缩文件夹路径StringsourceDir="D:\\test\\myFolder";// 加密压缩包保存路径StringzipFile="D:\\test\\myFolder_encrypt.zip";// 压缩包密码(建议包含大小写+数字+特殊字符)Stringpassword="Zip4j@123456";// 执行加密压缩+删除原文件夹encryptCompressDir(sourceDir,zipFile,password);}catch(Exceptione){e.printStackTrace();System.err.println("操作失败:"+e.getMessage());}}}

三、zip4j 1.x 核心配置说明(区别于2.x)

配置项1.x 常量值说明
压缩算法COMP_DEFLATE/COMP_STOREDEFLATE(有压缩)、STORE(无压缩)
压缩级别DEFLATE_LEVEL_0~DEFLATE_LEVEL_90最快,9压缩率最高,NORMAL=5(默认)
加密方式ENC_METHOD_AES/ENC_METHOD_STANDARDAES(安全)、ZIP2.0(弱加密,不推荐)
AES密钥强度AES_STRENGTH_128/256256位需JDK解锁无限制加密策略(JDK8及以下需替换JCE文件)

四、关键问题解决

1. AES-256 加密权限问题(JDK8及以下)

若运行时报ZipException: Invalid AES Key Strength,需替换 JDK 加密策略文件:

  • 下载「JCE 无限制强度管辖权策略文件」:Oracle 官网
  • 替换路径:JDK_HOME/jre/lib/security下的local_policy.jarUS_export_policy.jar
  • JDK9+ 已默认支持,无需替换。
2. 中文文件名乱码

1.x 版本需手动设置字符集:zipParams.setFileNameCharset("UTF-8"),否则压缩包内中文文件名会变成乱码。

3. 文件夹删除失败
  • 原因:文件夹内文件被其他程序占用、权限不足;
  • 解决:
    // 删除前增加权限设置+重试逻辑privatestaticbooleandeleteDirectory(Filedir){if(dir.isDirectory()){File[]children=dir.listFiles();if(children!=null){for(Filechild:children){// 赋予文件可写权限child.setWritable(true);booleansuccess=deleteDirectory(child);if(!success){// 重试删除(休眠500ms)try{Thread.sleep(500);success=child.delete();}catch(InterruptedExceptione){Thread.currentThread().interrupt();}if(!success)returnfalse;}}}}dir.setWritable(true);returndir.delete();}
4. 压缩包覆盖问题

若目标压缩包已存在,1.x 版本会默认追加文件,如需覆盖,需先删除已有压缩包:

FileexistingZip=newFile(zipFilePath);if(existingZip.exists()){if(!existingZip.delete()){thrownewZipException("已有压缩包无法删除,无法覆盖:"+zipFilePath);}}// 再创建新压缩包ZipFilezipFile=newZipFile(zipFilePath);

五、使用注意

  1. 压缩包密码建议设置复杂密码(大小写+数字+特殊字符),避免被暴力破解;
  2. 生产环境中建议增加「压缩成功校验」(检查压缩包大小、完整性),再删除原文件夹;
  3. 若需压缩指定类型文件(如仅压缩.txt),可通过FileFilter过滤:
    // 仅添加txt文件zipFile.addFolder(sourceDir,zipParams,file->file.getName().endsWith(".txt"));

该代码基于 zip4j 1.x 版本(core.ZipFile)实现,兼容旧项目依赖,可直接集成使用,核心逻辑清晰,同时处理了加密、乱码、删除失败等常见问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:27:11

雷科电力-REKE-5A大地网接地电阻测试仪

一、产品概述&#xff1a;雷科电力-REKE-5A 接地网阻抗测试仪是一种高精度测试仪器&#xff0c;广泛应用于变电站等领域&#xff0c;用于测试接地电阻及相关参数。该仪器具有体积小、重量轻、携带方便、抗干扰能力强、精度高等特点。仪器采用一体化结构&#xff0c;内置变频电源…

作者头像 李华
网站建设 2026/9/2 23:23:30

Qwen3-VL-8B本地部署与多模态应用指南

Qwen3-VL-8B 本地部署与多模态应用实战 你有没有遇到过这样的情况&#xff1f;用户上传一张模糊的订单截图&#xff0c;客服机器人却只能回一句“请描述问题”&#xff1b;电商平台每天新增上万张商品图&#xff0c;信息录入仍靠人工一条条核对&#xff1b;内容审核系统面对一张…

作者头像 李华
网站建设 2026/9/2 23:24:12

vLLM-Omni发布:全模态模型高效服务新框架

vLLM-Omni发布&#xff1a;全模态模型高效服务新框架 在生成式 AI 从“能说会写”迈向“能看会听、能创作会决策”的今天&#xff0c;多模态智能体正以前所未有的速度渗透进内容创作、智能客服、机器人交互等核心场景。然而&#xff0c;支撑这些复杂应用的底层推理系统却频频遭…

作者头像 李华
网站建设 2026/9/2 21:07:26

从Workflow到ReAct,AI Agent智能化升级全攻略,看懂这篇就够了!

本号之前文章中介绍了用Dify工具实现的针对故障拍照进行智能检索的运维神器&#xff0c;这个案例中Agent是使用典型的workflow方式配置出来的&#xff0c;“先进行OCR&#xff0c;然后检索知识&#xff0c;最后生成答案”这个执行步骤是我们预先定义好的&#xff0c;包括网上很…

作者头像 李华
网站建设 2026/9/2 22:47:41

文献查询:高效获取学术资源的方法与技巧研究

科研新人做综述时最痛苦&#xff1a;一搜就是几十页论文&#xff0c;重复、无关、没用。下面三款工具让我效率翻倍。 ① WisPaper&#xff08;智能学术搜索 文献管理&#xff09; 官网&#xff1a;https://www.wispaper.ai WisPaper 能通过关键词和语义搜索快速找到相关文献&…

作者头像 李华
网站建设 2026/9/3 1:09:13

FaceFusion在Linux环境下编译时常见依赖缺失问题解决

FaceFusion在Linux环境下编译时常见依赖缺失问题解决 在AI内容生成技术迅速普及的今天&#xff0c;人脸替换&#xff08;Face Swapping&#xff09;已不再是影视特效工作室的专属工具。开源项目如 FaceFusion 正在让高保真度的人脸融合、表情迁移和年龄变换能力走向更广泛的开发…

作者头像 李华