文件压缩解压工具类-含密码

  • 一、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依赖

<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version>
</dependency><!-- 以下为工具类涉及的其他依赖 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version>
</dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version>
</dependency>

2.工具类代码

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;/**1. 文件压缩解压工具类2.  3. @Author 屋顶上的蜗牛·3. @Date 2021-09-16*/
@Slf4j
public class ZipUtil {/*** 压缩指定文件夹下的文件** @param srcFilePath     待压缩的文件夹* @param zipPathFileName 生成的压缩文件(是可以压缩zip/rar/gip等类型)存放全路径名* @param password        加密密码*/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("压缩文件失败...");}}/*** 解压文件** @param zipFileFullName 待解压文件所在的全路径名* @param filePath        解压到的目标路径* @param password        需要解压的密码*/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("解压文件失败...");}}/*** 添加文件到压缩文件中** @param zipFullFileName  zip文件所在路径及全名* @param fullFileNameList 待添加的文件全路径集合* @param rootFolderInZip  在压缩文件里的文件夹名* @return 结果*/public static boolean addFilesToZip(String zipFullFileName, List<String> fullFileNameList, String rootFolderInZip) {try {ZipFile zipFile = new ZipFile(zipFullFileName);ArrayList<File> 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;}}/*** 从压缩文件中删除路径** @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) {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自行封装的常用方法。若有出入的地方, 欢迎博友们指正,笔者感激不尽!

【文件压缩解压工具类-含密码】相关推荐

  1. 【PC工具】文件压缩解压工具winrar解压缩装机必备软件,winRAR5.70免费无广告

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天分享一个常用的压缩解压工具winrar. 为啥要搞这个无广告版呢(废话),总之网上 ...

  2. java gzip 压缩解压工具类

    因为觉得简单,本想抱着百度直接拿过来用的心态,结果发现网上的代码都转载自同一份,且埋了一个坑,你不仔细去梳理,很难发现. mark下需要注意的两点: 1. 编码/解码,压缩/解压缩是成对出现的 编码: ...

  3. Linux中压缩解压工具使用

    1.压缩原理 目前我们使用的计算机系统是使用bytes单位计量的,实际上,计算机中最小的计量单位是bits 1 byte = 8 bits 在这里插入图片描述 一个空格代表一个bit,1byte就是8 ...

  4. python压缩文件tar_python 实现tar文件压缩解压的实例详解

    python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...

  5. 安利Keka for Mac(最好用的压缩解压工具)

    keka mac版是一款功能强大且易于使用的基于7za端口的macOS文件归档器,可以帮助您为您提供快速创建具有高压缩率的文件归档(7z,ISO,DMG,TAR,ZIP,Bzip2或Gzip).同时, ...

  6. 安卓zip解压软件_[Android]压缩解压工具ZArchiver Pro高级直装版

    [简介]:ZArchiver Pro是一款安卓平台的压缩解压工具,能够在手机端解压常见的rar,zip,7z等压缩文件,本版为Pro高级直装版本,解锁高级功能,支持压缩包注释查看.支持中文文件名,(这 ...

  7. linux jar和zip,Linux命令———zip和jar文件压缩解压

    Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...

  8. xz压缩解压工具的安装

    高版本的tar是可以解压xz压缩包的,假如可以,可直接跳过小节.假如不能解压压缩的话,需要安装下面的步骤安装xz的压缩解压工具. 下载的时候总会出现*.xz的文件.这个文件压缩率比较大,根据官方的说明 ...

  9. Qt基于QuaZIP实现文件压缩/解压(Linux下)

    Qt基于QuaZIP实现文件压缩/解压(Linux下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.配置 3.编译与安装 三.编译QuaZIP 1.下载QuaZIP源码 2.将zlib库 ...

最新文章

  1. Mysql 安装服务无法启动解决方案与使用的一般使用指令
  2. XTUOJ 1206 Dormitory's Elevator
  3. Mathematica 对曲线进行拟合
  4. 两端外伸梁内力计算机程序,理解材料力学核心问题:梁的弯曲 剪力弯矩图快速软件绘法...
  5. mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)
  6. [转载] 的士速递2
  7. 儿童手工制作日历_德莎胶带手工制作实用且美观的巨幅挂历,让你未雨绸缪
  8. python网站用什么数据库_PyMySQL数据库的使用
  9. apache配置多个虚拟主机
  10. java 反射初探(1)
  11. 【python】for..range练习 与函数的练习题
  12. 《Java编程思想》笔记14.类型信息
  13. Linux GCC make文件的写法4--清晰版
  14. 汇编:根据段大小计算偏移地址
  15. 计算机也无法解的函数,XP提示“无法访问函数不正确”怎么办|XP提示“函数不正确”的四种解决方案...
  16. [二级域名映射端口][Ngins端口映射]腾讯云二级域名映射端口
  17. 美团--测试创建团购订单
  18. 拼插机器人课和围棋课_开学第一课和机器人比围棋的人是谁
  19. MODBUS-RTU数据帧格式、报文实例
  20. 爬了链家二手房数据来告诉你深圳房价到底多恐怖!

热门文章

  1. 中国部队总动员截图!
  2. MLA Review之四:logistic回归
  3. 计算机教学研究与实践课题研究报告,(高职计算机教学改革与实践研究课题中期报告.doc...
  4. 1800万的红木家具竟是贴皮!关于家具贴皮,你必须了解这些常识!
  5. 【艾琪出品】《计算机应用基础》【试题汇总3】《多媒体技术》《网页设计与制作》《电子商务网站设计与管理》《数据库原理》
  6. assert()函数用法总结
  7. oracle 解锁对象,Oracle解锁的方式
  8. 关于KAL公司的一些情况
  9. 传指针和传引用的区别
  10. matlab数据如何平移,【Excel表格如何整体移动一行或一列?】Excel数据平移法