解压 rar,zip 文件保存到本地
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、导入依赖
- 二、功能代码
- 三、测试结果
- 解压前
- 解压后
- 总结
参考博客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 文件保存到本地相关推荐
- Java代码解压RAR/ZIP文件
pom.xml <!-- 导入zip解压包 --> <dependency><groupId>ant</groupId><artifactId&g ...
- 解压rar/zip工具类
工作中需要上传压缩包,后台需要对压缩包进行解压,并在边解压边查找指定文件,并保存到list中. 有关判断是rar还是zip的类: package com.cykj.reports.util;impor ...
- Mac 解压rar格式文件(附解压工具包)
Mac 解压rar格式文件* 工具包(zip格式):http://download.csdn.net/detail/u011445031/9854187 将工具包解压到你安装目录即可. 使用: 打开终 ...
- android解压rar方法,安卓手机如何解压rar/zip/7z等压缩包 详细图解教程
由于宅男吧论坛的资源大部分是通过 不过教程最后,关于(7z.001.7z.002之类的分卷文件),像这种分卷文件, 当时想着软件都是"教科式"操作,应该一看就会用了,可是依旧有部分 ...
- Python 解压rar类型文件
Python 解压rar类型文件 一.前提准备 1. pip install rarfile 2. 在官网下载 WinRAR安装包 ,安装完毕后在安装目录即可找到一个名为 "UnRAR.ex ...
- linux解压rar多层文件夹,linux rar 解压文件夹_rar文件夹
原标题:linux rar 解压文件夹_rar文件夹 本经验主要针对linux中的解压缩进行讲解工具/原料linux电脑一台linux文件解压缩1目前 rar a jpg.rar *.jpg //ra ...
- ubuntu18.04怎么解压rar压缩文件
ubuntu18.04怎么解压rar压缩文件 今天在自己的ubuntu18.04中得到一个rar的压缩文件,在windows下使用的winrar软件,在这里又安装不上,后来发现有一些开源的解压软件可以 ...
- win压缩包linux解压软件,linux解压rar,zip压缩文件教程
现在网上下载的文件很多都是rar,zip打包的,便于网络上传输,在Windows中只需要安装一个压缩软件那么加压rar,zip压缩文件就很方便了,那么在linux系统中呢,如何解压.zip和.rar文 ...
- 使用C#压缩解压rar格式文件
为了便于文件在网络中的传输和保存,通常将文件进行压缩操作,常用的压缩格式有rar.zip和7z,本文将介绍在C#中如何对这几种类型的文件进行压缩和解压,并提供一些在C#中解压缩文件的开源库. 在C#. ...
最新文章
- vue保存内容到本地_Vue两个版本区别
- win7下注册s2008
- 支付页面设计灵感|最美剁手的正确姿势!
- 将csv文件导入python_如何将csv文件导入数据数组?
- 基于Keras搭建mnist数据集训练识别的Pipeline
- 电商项目整体介绍-尚硅谷大数据培训
- 工程伦理期末考试答案(学堂云雨课堂)
- 无积分怎么下载百度文库的文档
- homelede软路由设置方法_小米路由器3 5G WiFi设置方法
- SpringCloud系列之服务总线(Bus)
- android imageview图片崩溃,安卓 ImageView 的使用及崩溃闪退、空白原因
- 聚合微信聊天crm调用代码
- 0 基础 Java 自学之路(2022年最新版)
- 抢救DB2数据之终极工具:db2dart
- 实现群辉NAS免端口访问教程
- 零基础怎么学习视频剪辑?这篇初剪辑学者指南你一定不要错过
- HRSSC是什么职位,有什么要求
- Docker Login 登录凭证安全存储
- 本地电脑部署微力同步私人网盘,端口映射实现远程访问
- JAVA异常处理(三种异常处理机制)