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进行文件压缩相关推荐

  1. java实现对pdf文件压缩,拆分,修改水印,添加水印

    最近要实现一个文件上传,并且在线预览上传文件的功能,设计思路是:把上传的文件通过openoffice转成pdf文件,并将pdf文件以流的形式返回到浏览器,由于上传的部分文件过大,转成pdf后传回前端浏 ...

  2. java编程笔记18 文件压缩与解压缩

    在java中,主要是利用ZipEntry,ZipInputStream和ZipOutputStream来实现zip数据压缩方式的编程方法, 构造方法摘要 ZipEntry(String name)   ...

  3. Java多线程实现多文件压缩下载

    1.java多线程通过多个路径压缩为一个zip文件 import lombok.Data; import org.springframework.util.CollectionUtils; impor ...

  4. java后台批量下载文件压缩ZIP

    @RequestMapping(value = "xxx/xxx",method = RequestMethod.POST )@ResponseBodypublic Map< ...

  5. 【文件压缩解压工具类-含密码】

    文件压缩解压工具类-含密码 一.zip4j简介 二.zip4j工具类使用步骤 1.添加maven依赖 2.工具类代码 3.调用测试 三.结语 一.zip4j简介 zip4j功能比较强大,支持加密.解密 ...

  6. ZIP文件压缩与解压缩

    ZIP4J解压优点 ZIP4J 是一个支持处理ZIP文件的开源库 支持创建,修改,添加,删除,解压 压缩文件 支持读/写密码保护 支持AES加密 128/256 支持标准ZIP加密 支持进度监视器 自 ...

  7. [Java]还在用360压缩吗?自己写一个吧

    Java中的I/O支持读写压缩格式的数据流,我们可以对其进行封装以达到压缩和解压缩的目的. 这些类并不是从Reader.Writer继承来的,而是属于InputStream.OutputStream继 ...

  8. java 压缩加密_java实现文件压缩并加密-基于zip4j

    /*** * @Title: zipFilesAndEncrypt * @Description: 将指定路径下的文件压缩至指定zip文件,并以指定密码加密 若密码为空,则不进行加密保护 *@para ...

  9. java 操作Zip文件(压缩、解压、加密)

    java 操作Zip文件(压缩.解压.加密) 依赖:点击下载 package com.zxl.test;import net.lingala.zip4j.model.ZipParameters; im ...

最新文章

  1. pytorch下载时出现错误:EOFError: Compressed file ended before the end-of-stream marker was reached
  2. php发送短信验证码
  3. 诗歌rails之 有条件的validation
  4. linux 更改ctime_Linux 的文件系统及文件缓存知识点整理
  5. linux中断程序快捷键,linux命令行快捷键
  6. postgresql操作
  7. 助你成为嵌入式高手的100多个软硬件开源项目
  8. Qt文档阅读笔记-QML Canvas的官方解析及实例
  9. LeetCode 476. Number Complement
  10. python基本数据类型第三周_python3第二天(基本数据类型)
  11. Python让繁琐工作自动化——chapter15 保持时间、计划任务和启动程序
  12. 植物大战僵尸修改植物攻击力
  13. 第1章 PyTorch和神经网:1.1 PyTorch和神经网络
  14. 18、DQL(分页查询:limt)
  15. pygame学习笔记——检测鼠标碰到、点击图片
  16. Android Remote Views
  17. 数学期望、信息量、信息熵、相对熵、交叉熵
  18. [OpenCV] CV_32F与CV_8U之间的数据类型转换
  19. 关于手机,最近想了这些
  20. 深度学习神经网络的部署

热门文章

  1. 扎克伯格是学计算机的吗,扎克伯格是犹太人吗?他毕业于哪个院校?
  2. LGA775 平台如今的性能最大化发挥
  3. 【ArduPilot开发指南】1.2.1 完整的参数列表 - AP_Periph参数
  4. java用list集合实现对数据的增加,删除,插入操作
  5. python开发面试问题及答案_集锦 | 53个Python面试问题 答案打包带走
  6. Mac系统NTFS磁盘读写软件Tuxera NTFS for Mac2022
  7. python 多元线性回归的系数检验 t p值_多元线性回归检验t检验(P值),F检验,R方等参数的含义...
  8. leanote mysql_leanote 服务器搭建
  9. 在滴滴和头条干了 2 年开发后的总结和思考
  10. 给GE下载的JPG卫片加配准JGW文件(批量 winform)