Java在不解压的前提下处理ZIP文件

在不解压zip的情况下,通过Zip4J工具包,直接以InputStream的形式,读取里面文件

JDK已经内置了ZipInputStream 能够完成该工作,但是内置的API存在各种问题,中文乱码的处理、带密码ZIP的解压等。

相比之下Zip4J工具包提供了更加方便快捷的处理。

maven依赖

<!-- zip4j的依赖 提供zip压缩包处理api-->
<dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>2.10.0</version>
</dependency><!-- demo里的FileUtils, 用于将流转为文件保存 方便测试,不需要的不用引入-->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>

实现过程

代码Demo

import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.FileHeader;
import org.apache.commons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.List;/*** zip处理工具包-基于zip4j** @author azhuzhu 2022/4/26 14:45*/
@Slf4j
public class Zip4jUtil {private static final String SAVE_DIR = "D:\\data2\\解压测试\\";public static void readZip(String filePath) {try (ZipFile zipFile = new ZipFile(filePath.replace("\\\\", "/"))) {// 字符集设置为GBK,避免中文名乱码zipFile.setCharset(Charset.forName("GBK"));if (!zipFile.isValidZipFile()) {return;}// 获取所有的文件(FileHeader包括了文件夹、子文件夹、文件)List<FileHeader> fileHeaderList = zipFile.getFileHeaders();log.info("文件&文件夹个数: {}", fileHeaderList.size());// 遍历其中的文件for (FileHeader fileHeader : fileHeaderList) {// FileHeader提供了是否文件夹的属性if (fileHeader.isDirectory()) {log.info("文件夹: {}", fileHeader.getFileName());} else {ZipInputStream inputStream = zipFile.getInputStream(fileHeader);// 通过commons-io的工具包将流转为文件存储来测试FileUtils.copyInputStreamToFile(inputStream, new File(SAVE_DIR + fileHeader.getFileName()));log.info("文件: {}", fileHeader.getFileName());}}} catch (IOException e) {log.error(e.getMessage(), e);}}public static void main(String[] args) {Zip4jUtil.readZip("D:\\data2\\解压测试\\解压测试包.zip");}}

执行效果

16:27:05.092 [main] INFO com.example.demo.zip.Zip4jUtil - 文件&文件夹个数: 36
16:27:27.545 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: fin-file/
16:27:34.270 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/058a10e76e276032052b07251cdf4149.png
16:27:34.281 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/1685de7f51ac149c31490c682ffb2788.jpg
16:27:34.354 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/1903445d99f9ce64a0cac696b759e28c.png
16:27:34.357 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/2bbb45acde7ca27c5968520d063cd62f.png
16:27:34.359 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/34430c81d1c179f684197925b75ff94e.pdf
16:27:34.361 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/44f84babd1d58b3614475b23175f9a97.ofd
16:27:34.364 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/542f7f1da6f82da73048cd60545a0e80.png
16:27:34.376 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/5f8c2374d6c9298b1c0280d45e099625.jpg
16:27:34.378 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/6009edc58b1c1d59393a63c31003f35c.pdf
16:27:34.380 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/7c582ed48f259d832f65dddb0b33123c.png
16:27:34.382 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/9d80d82654d105e68fecbb702fd6dc80.xlsx
16:27:34.386 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/a196f93546f34ed670367b0732574ba7.png
16:27:34.389 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/a8d8f9f0d3d08185abf4be428c9ecded.pdf
16:27:34.391 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/daea294aee31e42b802c3e351fc86d27.pdf
16:27:34.395 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/e1ba54622d2c06b36d067438d48caffe.pdf
16:27:34.475 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/efa1776763fb06e9e98db2ada00a11be.png
16:27:34.478 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/f04fb29fcf22e2c4a69995f1341293cc.pdf
16:27:34.480 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/f0e914ee75fd90fdcabc50413211859f.pdf
16:27:34.483 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/f33e8e457ad27a1444faa56faeb5bf19.docx
16:27:34.484 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/f8705dd59af6588906eeb4871a926514.md
16:27:34.486 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/ff78d71c844a9b23e73dbeb18d8e8761.csv
16:27:34.511 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: fin-file/fin-file.zip
16:27:34.512 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件.txt
16:27:34.512 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: 中文文件夹/
16:27:34.512 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: 中文文件夹/excel/
16:27:34.514 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: 中文文件夹/excel/10001/
16:27:34.514 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: 中文文件夹/excel/10001/2021/
16:27:34.514 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: 中文文件夹/excel/10001/2021/5/
16:27:34.535 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件夹/excel/10001/2021/5/1622185158610.xlsx
16:27:34.536 [main] INFO com.example.demo.zip.Zip4jUtil - 文件夹: 中文文件夹/excel/10001/2021/6/
16:27:34.539 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件夹/excel/10001/2021/6/1623811824353.xlsx
16:27:34.542 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件夹/excel/10001/2021/6/1623830531618.xlsx
16:27:34.543 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件夹/excel/10001/2021/6/1623999477076.xlsx
16:27:34.546 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件夹/excel/10001/2021/6/1624000368950.xlsx
16:27:34.550 [main] INFO com.example.demo.zip.Zip4jUtil - 文件: 中文文件夹/excel/10001/2021/6/1624007107840.xlsx

总结

这种处理方式主要用于方便非本地存储时的转储,如果直接解压,会形成临时文件,需要删除。也避免压缩包过大时,解压循环处理的损耗。

Java在不解压的前提下处理ZIP文件相关推荐

  1. 如何解压服务器系统,如何解压Linux系统下的zip文件

    如何解压Linux系统下的zip文件 发布时间:2020-08-10 09:28:56 来源:亿速云 阅读:76 作者:Leah 这期内容当中小编将会给大家带来有关如何解压Linux系统下的zip文件 ...

  2. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件。...

    原文:C#.Net 如何动态加载与卸载程序集(.dll或者.exe)6-----在不卸载程序域的前提下替换程序集文件. 当某个程序集文件被载入AppDomain,该文件在AppDomain.Unloa ...

  3. linux 解压文件夹下所有zip文件

    解压上述文件. find . -name '*.zip' # 查看当前文件夹下所有zip文件 cd zip文件的父级文件夹目录 unzip '*.zip' # 运行此命令即可 还有一种方法, 直接使用 ...

  4. java http 下载网页代码_Java下http下载文件客户端和上传文件客户端实例代码

    Java下http下载文件客户端和上传文件客户端实例代码 发布于 2021-1-14| 复制链接 摘记: 一.下载客户端代码 ```java package javadownload; import ...

  5. linux tar.xz 解压命令,Linux下.tar.xz文件的解压教程详解

    前言 对于xz这个压缩相信很多人陌生,但xz是绝大数linux默认就带的一个压缩工具,xz格式比7z还要小. 最近在下载某个源码包的时候遇到的这种压缩格式,乘此机会分享一下xz的压缩与解压方法. 安装 ...

  6. cmd命令下,使用java命令,运行指定目录下的*.class文件。

    目标: 使用jdk1.8bin目录下的java.jdk1.9目录下的java命令, 运行D:\111\222\下的HelloWorld.class文件,(HelloWorld在包com.xxx中) 使 ...

  7. java zipfile用法_Java使用ZipFile类实现Zip文件解压

    java.util.zip.ZipFile类用于从 ZIP 文件读取条目. 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称.是否为目录等信息.可以使用这个类来实现将zip文件进行解压操作 ...

  8. 如何将一个压缩包在不解压的情况下,进行分卷

    由于我想要在云端保存一个文件,但是文件超出传输限制,因此需要进行分卷压缩. 但是出于个人原因,不愿意先解压再压缩. 因此产生如下解决方法. 1.将文件后缀名(如zip.rar等)修改为非压缩文件格式, ...

  9. Java案例:生成指定目录下某种类型文件的列表

    文章目录 一.提出任务 二.解决问题 1.创建Java项目 - GetTypeFiles 2.创建net.hw.file包,在里面创建getFiles类 3.启动程序,查看效果 一.提出任务 编写一个 ...

最新文章

  1. java员工信息管理_基于jsp的员工信息管理-JavaEE实现员工信息管理 - java项目源码...
  2. Python最佳代码实践:性能、内存和可用性!
  3. Please verify you invoked Maven from the correct directory
  4. jvm 启动参数设置
  5. C/C++ 获取本地日期时间常见方法
  6. 斗鱼mac html5,斗鱼html5插件
  7. SQL语句优化常见方法
  8. android png 动画背景透明,Android透明PNG文件添加底色
  9. 菜鸟电子面单获取教程
  10. Android 新浪微博开放平台应用 android签名怎么获得
  11. 英语语法 第一章 句子的形成——概说
  12. 3600000毫秒等于多少小时,一小时等于多少毫秒
  13. 用MATLAB敲qda,LOMO_XQDA
  14. 从0开始的appium+Android+python自动抢红包世界生活
  15. Spring 第二篇 注解+ xml 配置 与 纯注解开发 与集成 junit测试
  16. 【Jaya算法解决柔性作业车间调度问题(附代码)】
  17. Android Q USB Tethering 端口切换分析
  18. 计算几何入门 1.3:凸包的构造——增量构造法
  19. Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新
  20. AcWing 285. 没有上司的舞会

热门文章

  1. MOOC学习数据结构--第一周
  2. redis中hash数据结构
  3. IE被www.537.com,www.COXDX.INFO劫持,修复~
  4. sentinel限流介绍
  5. 2021年05月软件设计师真题透析
  6. EXCEL函数篇 跨工作表统计数据
  7. Python基础入门教程:Day21-30/Web前端概述
  8. d调 简谱 一次就好
  9. 128. 损益类科目能说出几个?
  10. 二年级计算机是学什么内容的,小学二年级上册信息技术教案【三篇】