【文件压缩解压工具类-含密码】
文件压缩解压工具类-含密码
- 一、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自行封装的常用方法。若有出入的地方, 欢迎博友们指正,笔者感激不尽!
【文件压缩解压工具类-含密码】相关推荐
- 【PC工具】文件压缩解压工具winrar解压缩装机必备软件,winRAR5.70免费无广告
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天分享一个常用的压缩解压工具winrar. 为啥要搞这个无广告版呢(废话),总之网上 ...
- java gzip 压缩解压工具类
因为觉得简单,本想抱着百度直接拿过来用的心态,结果发现网上的代码都转载自同一份,且埋了一个坑,你不仔细去梳理,很难发现. mark下需要注意的两点: 1. 编码/解码,压缩/解压缩是成对出现的 编码: ...
- Linux中压缩解压工具使用
1.压缩原理 目前我们使用的计算机系统是使用bytes单位计量的,实际上,计算机中最小的计量单位是bits 1 byte = 8 bits 在这里插入图片描述 一个空格代表一个bit,1byte就是8 ...
- python压缩文件tar_python 实现tar文件压缩解压的实例详解
python 实现tar文件压缩解压的实例详解 python 实现tar文件压缩解压的实例详解 压缩文件: import tarfile import os def tar(fname): t = t ...
- 安利Keka for Mac(最好用的压缩解压工具)
keka mac版是一款功能强大且易于使用的基于7za端口的macOS文件归档器,可以帮助您为您提供快速创建具有高压缩率的文件归档(7z,ISO,DMG,TAR,ZIP,Bzip2或Gzip).同时, ...
- 安卓zip解压软件_[Android]压缩解压工具ZArchiver Pro高级直装版
[简介]:ZArchiver Pro是一款安卓平台的压缩解压工具,能够在手机端解压常见的rar,zip,7z等压缩文件,本版为Pro高级直装版本,解锁高级功能,支持压缩包注释查看.支持中文文件名,(这 ...
- linux jar和zip,Linux命令———zip和jar文件压缩解压
Linux命令---zip和jar文件压缩解压 (1)ubuntu 使用unzip和zip压缩文件 1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [ ...
- xz压缩解压工具的安装
高版本的tar是可以解压xz压缩包的,假如可以,可直接跳过小节.假如不能解压压缩的话,需要安装下面的步骤安装xz的压缩解压工具. 下载的时候总会出现*.xz的文件.这个文件压缩率比较大,根据官方的说明 ...
- Qt基于QuaZIP实现文件压缩/解压(Linux下)
Qt基于QuaZIP实现文件压缩/解压(Linux下) 一.工具准备 二.编译zlib 1.下载zlib源码 2.配置 3.编译与安装 三.编译QuaZIP 1.下载QuaZIP源码 2.将zlib库 ...
最新文章
- Mysql 安装服务无法启动解决方案与使用的一般使用指令
- XTUOJ 1206 Dormitory's Elevator
- Mathematica 对曲线进行拟合
- 两端外伸梁内力计算机程序,理解材料力学核心问题:梁的弯曲 剪力弯矩图快速软件绘法...
- mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询)
- [转载] 的士速递2
- 儿童手工制作日历_德莎胶带手工制作实用且美观的巨幅挂历,让你未雨绸缪
- python网站用什么数据库_PyMySQL数据库的使用
- apache配置多个虚拟主机
- java 反射初探(1)
- 【python】for..range练习 与函数的练习题
- 《Java编程思想》笔记14.类型信息
- Linux GCC make文件的写法4--清晰版
- 汇编:根据段大小计算偏移地址
- 计算机也无法解的函数,XP提示“无法访问函数不正确”怎么办|XP提示“函数不正确”的四种解决方案...
- [二级域名映射端口][Ngins端口映射]腾讯云二级域名映射端口
- 美团--测试创建团购订单
- 拼插机器人课和围棋课_开学第一课和机器人比围棋的人是谁
- MODBUS-RTU数据帧格式、报文实例
- 爬了链家二手房数据来告诉你深圳房价到底多恐怖!
热门文章
- 中国部队总动员截图!
- MLA Review之四:logistic回归
- 计算机教学研究与实践课题研究报告,(高职计算机教学改革与实践研究课题中期报告.doc...
- 1800万的红木家具竟是贴皮!关于家具贴皮,你必须了解这些常识!
- 【艾琪出品】《计算机应用基础》【试题汇总3】《多媒体技术》《网页设计与制作》《电子商务网站设计与管理》《数据库原理》
- assert()函数用法总结
- oracle 解锁对象,Oracle解锁的方式
- 关于KAL公司的一些情况
- 传指针和传引用的区别
- matlab数据如何平移,【Excel表格如何整体移动一行或一列?】Excel数据平移法