Java使用zip4j进行文件压缩
pom依赖:
<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j -->
<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version>
</dependency>
import java.io.File;
import java.util.ArrayList;
import java.util.List;import org.springframework.util.StringUtils;import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;public class ZipUtils {/*** 根据给定密码压缩文件(s)到指定目录** @param destFileName 压缩文件存放绝对路径 e.g.:D:/upload/zip/demo.zip* @param passwd 密码(可为空)* @param files 单个文件或文件数组* @return 最终的压缩文件存放的绝对路径, 如果为null则说明压缩失败.*/public static String compress(String destFileName, String passwd, File... files) {ZipParameters parameters = new ZipParameters();parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // 压缩方式parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 压缩级别if (!StringUtils.isEmpty(passwd)) {parameters.setEncryptFiles(true);parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); // 加密方式 parameters.setPassword(passwd.toCharArray());}try {ZipFile zipFile = new ZipFile(destFileName);for (File file : files) {zipFile.addFile(file, parameters);}return destFileName;} catch (ZipException e) {e.printStackTrace();}return null;}/*** 根据给定密码压缩文件(s)到指定位置** @param destFileName 压缩文件存放绝对路径 e.g.:D:/upload/zip/demo.zip* @param passwd 密码(可为空)* @param filePaths 单个文件路径或文件路径数组* @return 最终的压缩文件存放的绝对路径, 如果为null则说明压缩失败.*/public static String compress(String destFileName, String passwd, String... filePaths) {int size = filePaths.length;File[] files = new File[size];for (int i = 0; i < size; i++) {files[i] = new File(filePaths[i]);}return compress(destFileName, passwd, files);}/*** 根据给定密码压缩文件(s)到指定位置** @param destFileName 压缩文件存放绝对路径 e.g.:D:/upload/zip/demo.zip* @param passwd 密码(可为空)* @param folder 文件夹路径* @return 最终的压缩文件存放的绝对路径, 如果为null则说明压缩失败.*/public static String compressFolder(String destFileName, String passwd, String folder) {File folderParam = new File(folder);if (folderParam.isDirectory()) {File[] files = folderParam.listFiles();return compress(destFileName, passwd, files);}return null;}/*** 根据所给密码解压zip压缩包到指定目录* <p>* 如果指定目录不存在,可以自动创建,不合法的路径将导致异常被抛出** @param zipFile zip压缩包绝对路径* @param dest 指定解压文件夹位置* @param passwd 密码(可为空)* @return 解压后的文件数组* @throws ZipException*/@SuppressWarnings("unchecked")public static File[] deCompress(File zipFile, String dest, String passwd) throws ZipException {
//1.判断指定目录是否存在File destDir = new File(dest);if (destDir.isDirectory() && !destDir.exists()) {destDir.mkdir();}
//2.初始化zip工具ZipFile zFile = new ZipFile(zipFile);zFile.setFileNameCharset("UTF-8");if (!zFile.isValidZipFile()) {throw new ZipException("压缩文件不合法,可能被损坏.");}
//3.判断是否已加密if (zFile.isEncrypted()) {zFile.setPassword(passwd.toCharArray());}
//4.解压所有文件 zFile.extractAll(dest);List<FileHeader> headerList = zFile.getFileHeaders();List<File> extractedFileList = new ArrayList<File>();for (FileHeader fileHeader : headerList) {if (!fileHeader.isDirectory()) {extractedFileList.add(new File(destDir, fileHeader.getFileName()));}}File[] extractedFiles = new File[extractedFileList.size()];extractedFileList.toArray(extractedFiles);return extractedFiles;}/*** 解压无密码的zip压缩包到指定目录** @param zipFile zip压缩包* @param dest 指定解压文件夹位置* @return 解压后的文件数组* @throws ZipException*/public static File[] deCompress(File zipFile, String dest) {try {return deCompress(zipFile, dest, null);} catch (ZipException e) {e.printStackTrace();}return null;}/*** 根据所给密码解压zip压缩包到指定目录** @param zipFilePath zip压缩包绝对路径* @param dest 指定解压文件夹位置* @param passwd 压缩包密码* @return 解压后的所有文件数组*/public static File[] deCompress(String zipFilePath, String dest, String passwd) {try {return deCompress(new File(zipFilePath), dest, passwd);} catch (ZipException e) {e.printStackTrace();}return null;}/*** 无密码解压压缩包到指定目录** @param zipFilePath zip压缩包绝对路径* @param dest 指定解压文件夹位置* @return 解压后的所有文件数组*/public static File[] deCompress(String zipFilePath, String dest) {try {return deCompress(new File(zipFilePath), dest, null);} catch (ZipException e) {e.printStackTrace();}return null;}public static void main(String[] args) {
// String folder = "D:\\upload\\backup\\down\\dezip\\";
// compress("D:/upload/zip/测试.zip", "123456", folder);deCompress("D:/upload/zip/测试.zip", "D:/upload/zip/unzip", "123456");}
}
Java使用zip4j进行文件压缩相关推荐
- java实现对pdf文件压缩,拆分,修改水印,添加水印
最近要实现一个文件上传,并且在线预览上传文件的功能,设计思路是:把上传的文件通过openoffice转成pdf文件,并将pdf文件以流的形式返回到浏览器,由于上传的部分文件过大,转成pdf后传回前端浏 ...
- java编程笔记18 文件压缩与解压缩
在java中,主要是利用ZipEntry,ZipInputStream和ZipOutputStream来实现zip数据压缩方式的编程方法, 构造方法摘要 ZipEntry(String name) ...
- Java多线程实现多文件压缩下载
1.java多线程通过多个路径压缩为一个zip文件 import lombok.Data; import org.springframework.util.CollectionUtils; impor ...
- java后台批量下载文件压缩ZIP
@RequestMapping(value = "xxx/xxx",method = RequestMethod.POST )@ResponseBodypublic Map< ...
- 【文件压缩解压工具类-含密码】
文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...
- ZIP文件压缩与解压缩
ZIP4J解压优点 ZIP4J 是一个支持处理ZIP文件的开源库 支持创建,修改,添加,删除,解压 压缩文件 支持读/写密码保护 支持AES加密 128/256 支持标准ZIP加密 支持进度监视器 自 ...
- [Java]还在用360压缩吗?自己写一个吧
Java中的I/O支持读写压缩格式的数据流,我们可以对其进行封装以达到压缩和解压缩的目的. 这些类并不是从Reader.Writer继承来的,而是属于InputStream.OutputStream继 ...
- java 压缩加密_java实现文件压缩并加密-基于zip4j
/*** * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密 若密码为空,则不进行加密保护 *@para ...
- java 操作Zip文件(压缩、解压、加密)
java 操作Zip文件(压缩.解压.加密) 依赖:点击下载 package com.zxl.test;import net.lingala.zip4j.model.ZipParameters; im ...
最新文章
- pytorch下载时出现错误:EOFError: Compressed file ended before the end-of-stream marker was reached
- php发送短信验证码
- 诗歌rails之 有条件的validation
- linux 更改ctime_Linux 的文件系统及文件缓存知识点整理
- linux中断程序快捷键,linux命令行快捷键
- postgresql操作
- 助你成为嵌入式高手的100多个软硬件开源项目
- Qt文档阅读笔记-QML Canvas的官方解析及实例
- LeetCode 476. Number Complement
- python基本数据类型第三周_python3第二天(基本数据类型)
- Python让繁琐工作自动化——chapter15 保持时间、计划任务和启动程序
- 植物大战僵尸修改植物攻击力
- 第1章 PyTorch和神经网:1.1 PyTorch和神经网络
- 18、DQL(分页查询:limt)
- pygame学习笔记——检测鼠标碰到、点击图片
- Android Remote Views
- 数学期望、信息量、信息熵、相对熵、交叉熵
- [OpenCV] CV_32F与CV_8U之间的数据类型转换
- 关于手机,最近想了这些
- 深度学习神经网络的部署
热门文章
- 扎克伯格是学计算机的吗,扎克伯格是犹太人吗?他毕业于哪个院校?
- LGA775 平台如今的性能最大化发挥
- 【ArduPilot开发指南】1.2.1 完整的参数列表 - AP_Periph参数
- java用list集合实现对数据的增加,删除,插入操作
- python开发面试问题及答案_集锦 | 53个Python面试问题 答案打包带走
- Mac系统NTFS磁盘读写软件Tuxera NTFS for Mac2022
- python 多元线性回归的系数检验 t p值_多元线性回归检验t检验(P值),F检验,R方等参数的含义...
- leanote mysql_leanote 服务器搭建
- 在滴滴和头条干了 2 年开发后的总结和思考
- 给GE下载的JPG卫片加配准JGW文件(批量 winform)