提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、导入依赖
  • 二、功能代码
  • 三、测试结果
    • 解压前
    • 解压后
  • 总结

参考博客1
参考博客2
参考博客3(此方法未使用)

前言

工作中遇到了,.rar .zip 文件上传保存到本地功能,由此写了这篇文章记录一下,如有错误还请指出。


一、导入依赖

<dependency><groupId>net.sf.sevenzipjbinding</groupId><artifactId>sevenzipjbinding</artifactId><version>16.02-2.01</version>
</dependency>
<dependency><groupId>net.sf.sevenzipjbinding</groupId><artifactId>sevenzipjbinding-all-platforms</artifactId><version>16.02-2.01</version>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version>
</dependency>

二、功能代码

import net.sf.sevenzipjbinding.IInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;import java.io.IOException;
import java.io.RandomAccessFile;/*** 解压文件工具类** @version 1.0.0* @Author : LiaoBiKun* @create 2022/6/5 18:42*/
public final class DecompressUtil {private DecompressUtil() {}public static void main(String[] args) throws IOException {String rarDir = "C:\\Users\\lbk24\\Desktop\\test.zip";String outDir = "D:\\12\\";decompressFile(rarDir, outDir);}/*** 解压文件,保存到指定输出路径** @param rarPath          压缩文件所在路径* @param dstDirectoryPath 解压文件路径* @throws IOException*/public static void decompressFile(String rarPath, String dstDirectoryPath) throws IOException {try (// 第一个参数是需要解压的压缩包路径,第二个参数参考JdkAPI文档的RandomAccessFile// r代表以只读的方式打开文本,也就意味着不能用write来操作文件RandomAccessFile randomAccessFile = new RandomAccessFile(rarPath, "r");IInArchive archive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile))) {int[] in = new int[archive.getNumberOfItems()];for (int i = 0; i < in.length; i++) {in[i] = i;}archive.extract(in, false, new ExtractCallback(archive, dstDirectoryPath));}}
}
import net.sf.sevenzipjbinding.*;import java.io.*;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;/*** 提取压缩文件中的文件** @version 1.0.0* @Author : LiaoBiKun* @create 2022/6/5 18:43*/
public class ExtractCallback implements IArchiveExtractCallback {private IInArchive inArchive;// 解压的路径private String ourDir;public ExtractCallback(IInArchive inArchive, String ourDir) {this.inArchive = inArchive;this.ourDir = ourDir;}@Overridepublic void setCompleted(long arg0) throws SevenZipException {}@Overridepublic void setTotal(long arg0) throws SevenZipException {}@Overridepublic ISequentialOutStream getStream(int index, ExtractAskMode extractAskMode) throws SevenZipException {// 文件路径String path = (String) inArchive.getProperty(index, PropID.PATH);// 是否是文件夹Boolean isFolder = (Boolean) inArchive.getProperty(index, PropID.IS_FOLDER);// 保存上次遍历的路径AtomicReference<String> previous = new AtomicReference<>();// 注意:如果文件过大这里会拆分多个byte数组进行循环// 如果需要的是一个流,可以考虑拼接 data[] 集合return data -> {if (!isFolder) {File file = new File(ourDir + "\\" + path);// 保存文件,如果文件路径跟上次循环的一致则追加save2File(file, data, Objects.equals(previous.get(), path));// 保存这次遍历路径,下次判断使用previous.set(path);}return data.length;};}@Overridepublic void prepareOperation(ExtractAskMode arg0) throws SevenZipException {}@Overridepublic void setOperationResult(ExtractOperationResult extractOperationResult) throws SevenZipException {}/*** 保存文件** @param file   保存的文件* @param data   保存的字节* @param append 是否追加文件*/public void save2File(File file, byte[] data, boolean append) {File parent = file.getParentFile();// 目录不存在并且创建文件目录失败if (!parent.exists() && !parent.mkdirs()) {return;}try (OutputStream fos = new FileOutputStream(file, append)) {fos.write(data);fos.flush();} catch (IOException e) {e.printStackTrace();}}
}

三、测试结果

解压前

解压后

总结

保存压缩文件

解压 rar,zip 文件保存到本地相关推荐

  1. Java代码解压RAR/ZIP文件

    pom.xml <!-- 导入zip解压包 --> <dependency><groupId>ant</groupId><artifactId&g ...

  2. 解压rar/zip工具类

    工作中需要上传压缩包,后台需要对压缩包进行解压,并在边解压边查找指定文件,并保存到list中. 有关判断是rar还是zip的类: package com.cykj.reports.util;impor ...

  3. Mac 解压rar格式文件(附解压工具包)

    Mac 解压rar格式文件* 工具包(zip格式):http://download.csdn.net/detail/u011445031/9854187 将工具包解压到你安装目录即可. 使用: 打开终 ...

  4. android解压rar方法,安卓手机如何解压rar/zip/7z等压缩包 详细图解教程

    由于宅男吧论坛的资源大部分是通过 不过教程最后,关于(7z.001.7z.002之类的分卷文件),像这种分卷文件, 当时想着软件都是"教科式"操作,应该一看就会用了,可是依旧有部分 ...

  5. Python 解压rar类型文件

    Python 解压rar类型文件 一.前提准备 1. pip install rarfile 2. 在官网下载 WinRAR安装包 ,安装完毕后在安装目录即可找到一个名为 "UnRAR.ex ...

  6. linux解压rar多层文件夹,linux rar 解压文件夹_rar文件夹

    原标题:linux rar 解压文件夹_rar文件夹 本经验主要针对linux中的解压缩进行讲解工具/原料linux电脑一台linux文件解压缩1目前 rar a jpg.rar *.jpg //ra ...

  7. ubuntu18.04怎么解压rar压缩文件

    ubuntu18.04怎么解压rar压缩文件 今天在自己的ubuntu18.04中得到一个rar的压缩文件,在windows下使用的winrar软件,在这里又安装不上,后来发现有一些开源的解压软件可以 ...

  8. win压缩包linux解压软件,linux解压rar,zip压缩文件教程

    现在网上下载的文件很多都是rar,zip打包的,便于网络上传输,在Windows中只需要安装一个压缩软件那么加压rar,zip压缩文件就很方便了,那么在linux系统中呢,如何解压.zip和.rar文 ...

  9. 使用C#压缩解压rar格式文件

    为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...

最新文章

  1. vue保存内容到本地_Vue两个版本区别
  2. win7下注册s2008
  3. 支付页面设计灵感|最美剁手的正确姿势!
  4. 将csv文件导入python_如何将csv文件导入数据数组?
  5. 基于Keras搭建mnist数据集训练识别的Pipeline
  6. 电商项目整体介绍-尚硅谷大数据培训
  7. 工程伦理期末考试答案(学堂云雨课堂)
  8. 无积分怎么下载百度文库的文档
  9. homelede软路由设置方法_小米路由器3 5G WiFi设置方法
  10. SpringCloud系列之服务总线(Bus)
  11. android imageview图片崩溃,安卓 ImageView 的使用及崩溃闪退、空白原因
  12. 聚合微信聊天crm调用代码
  13. 0 基础 Java 自学之路(2022年最新版)
  14. 抢救DB2数据之终极工具:db2dart
  15. 实现群辉NAS免端口访问教程
  16. 零基础怎么学习视频剪辑?这篇初剪辑学者指南你一定不要错过
  17. HRSSC是什么职位,有什么要求
  18. Docker Login 登录凭证安全存储
  19. 本地电脑部署微力同步私人网盘,端口映射实现远程访问
  20. JAVA异常处理(三种异常处理机制)

热门文章

  1. python 自定义排序
  2. 丰田项目踩坑手记(REACT)
  3. 网易射击手游堡垒前线明日上线:创造加吃鸡模式你喜欢吗?
  4. 如何学习数据结构?(纯干货)
  5. linux时间管理,时钟中断,系统节拍
  6. 二维分类教案_幼儿园中班教案:《图形分类》
  7. 我理解的myisam引擎之一 myisam表特征
  8. 【论文写作】SCI论文写作过程中必备的科研工具
  9. InnoDB MVCC 机制
  10. html5 打开word文档,打开文件的方式 打开Word文档的方法有几种?