java解析rar压缩包兼容rar4
1 .导包:
<dependency><groupId>com.github.axet</groupId><artifactId>java-unrar</artifactId><version>1.7.0-8</version> </dependency> <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>
import net.sf.sevenzipjbinding.IInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;import java.io.File;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;public class FileUtil {public static List<String> unRar(File rarFile, String dstDirectoryPath){IInArchive archive;RandomAccessFile randomAccessFile;try {randomAccessFile = new RandomAccessFile(rarFile,"r");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));archive.close();randomAccessFile.close();System.out.println("解压目标文件夹:"+dstDirectoryPath);List<String> allFileList = getAllFile(dstDirectoryPath,false);ArrayList<String> resultFileList = new ArrayList<>();String startString;String endString;String finallyString;for (String s : allFileList) {if (s.startsWith("/")||s.startsWith("\\")) {startString = s.substring(0,s.lastIndexOf("\\"));endString = s.substring(s.lastIndexOf("\\")+1);finallyString = startString+"\\"+endString;}else {// windows去掉盘符s.substring(2);startString = s.substring(0,s.lastIndexOf("\\"));endString = s.substring(s.lastIndexOf("\\")+1);finallyString = startString+"/"+endString;}System.out.println("rar文件解压前缀为:"+startString+",rar文件解压后缀为:"+endString);// 解决linux路径出现//导致文件路径错误finallyString = finallyString.replaceAll("//","/");resultFileList.add(finallyString);}System.out.println("rar文件解压文件路径为:"+resultFileList);return resultFileList;} catch (Exception e) {e.printStackTrace();}return null;}public static List<String> getAllFile(String directoryPath,boolean isAddDirectory){List<String> list = new ArrayList<>();File baseFile = new File(directoryPath);if (baseFile.isFile()||!baseFile.exists()) {return list;}File[] files = baseFile.listFiles();for (File file : files) {if (file.isDirectory()) {if (isAddDirectory) {list.add(file.getAbsolutePath());}list.addAll(getAllFile(file.getAbsolutePath(),isAddDirectory));}else {list.add(file.getAbsolutePath());}}return list;}
}
import net.sf.sevenzipjbinding.*;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;public class ExtractCallback implements IArchiveExtractCallback {private int index;private IInArchive inArchive;private String ourDir;public ExtractCallback(IInArchive inArchive, String ourDir) {this.inArchive = inArchive;this.ourDir = ourDir;}@Overridepublic ISequentialOutStream getStream(int index, ExtractAskMode extractAskMode) throws SevenZipException {this.index = index;final String path = (String) inArchive.getProperty(index, PropID.PATH);final boolean isFolder = (boolean) inArchive.getProperty(index, PropID.IS_FOLDER);final String[] oldPath = {""};return new ISequentialOutStream() {@Overridepublic int write(byte[] data) throws SevenZipException {try {if (!isFolder) {File file = new File(ourDir + "\\" + path);if (path.equals(oldPath[0])) {save2File(file, data, true);} else {save2File(file, data, false);}oldPath[0] = path;}} catch (Exception e) {e.printStackTrace();}return data.length;}};}@Overridepublic void prepareOperation(ExtractAskMode extractAskMode) throws SevenZipException {}@Overridepublic void setOperationResult(ExtractOperationResult extractOperationResult) throws SevenZipException {}@Overridepublic void setTotal(long l) throws SevenZipException {}@Overridepublic void setCompleted(long l) throws SevenZipException {}public boolean save2File(File file, byte[] msg, boolean append) {FileOutputStream fos = null;try {File parent = file.getParentFile();boolean bool;if ((!parent.exists()) && (!parent.mkdirs())) {return false;}fos = new FileOutputStream(file, append);fos.write(msg);fos.flush();return true;} catch (Exception e) {e.printStackTrace();return false;} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}}
}
测试:
public static void main(String[] args) {String source = "F:\\test\\unrar\\7个小矮人4.rar";String target = "F:\\test\\unrar\\解压后\\";List<String> list = FileUtil.unRar(new File(source), target);list.forEach(System.out::println); }
java解析rar压缩包兼容rar4相关推荐
- Java解压缩zip包+rar包兼容rar4和rar5兼容多操作系统
业务背景:需要将zip包或者rar包进行解压缩,需要兼容rar4和rar5两种版本 maven 依赖包: <dependency><groupId>com.github.jun ...
- java解压rar5 兼容rar4(改bug)
本篇是为修改原作者bug,原作者:java解压rar5 兼容rar4_So straw?-CSDN博客 在我测试时发现bug,此方法 public int write(byte[] data) thr ...
- java解压rar5 兼容rar4
才发现java库没有对rar5压缩算法实现,网上找了一大堆资料,基本都是调用命令的方式,要集成到项目里是很麻烦的,所以一直奔着java解压rar5的目标去找,终于在github上找到了已经实现好的库, ...
- java解析获取Excel中的数据--同时兼容2003及2007
首先大家先了解一下以下内容:引用 http://feitian0127.iteye.com/blog/1152524 java解析Excel(兼容2003及2007) 刚开始从网上找了个例子使用new ...
- java解析zip格式压缩包
java解析zip格式压缩包 做项目时遇到需要将zip格式的压缩包解析里面的图片 将里面的图片保存到文件夹 并且保存到数据库中关联起来 在上传时判断是否为zip格式的文件 @RequestMappin ...
- mysql解释器_atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- java生成pdf417_生成PDF417的JAVA包.rar
压缩包 : 生成PDF417的JAVA包.rar 列表 RBarCodeServlet.java javadoc javadoc\allclasses-frame.html javadoc\com j ...
- php zip解压,php解压缩zip和rar压缩包文件
项目涉及文档处理,用户上传的包括zip和rar压缩包,需要先将压缩包解压后再作处理.对于zip压缩包,由于php自带zip扩展,可以直接解压. 解压zip压缩包: $file = "/opt ...
- Java解析证书内容
Java解析证书获取证书内部信息,在证书交换环节中常使用,网络上也提供很多参考方案,本文主要是提供证书base64格式解析和证书路径解析证书内容.在解析时可能会遇到一些问题,后面根据情况再具体说明. ...
最新文章
- ajax 取值 返回map_springboot|前端发ajax请求到后台Controller及常见的坑
- python webbrowser_python webbrowser模块(浏览器操作)
- java发送gmail_如何在Gmail中轻松通过电子邮件发送人群
- windows挂载ext4_使用 UEFI 双启动 Windows 和 Linux | Linux 中国
- C++多态相关关问题及虚表剖析
- Snacks HDU 5692 dfs序列+线段树
- 【集】华硕,技嘉主板注入USB3.0驱动
- 贪心算法详细讲解(附例题,一看就会)
- 记录一下线上高并发情况下 SimpleDateFormat 出现异常问题【项目】
- Spring Cloud Bus 使用说明
- CF1132D Stressful Training(优先队列+二分)
- (73)Wangdao.com第十二天_JavaScript consol 对象与控制台
- Linux学习之Kali制作简单的Windows的木马,创建后门
- R 语言中1 和1L的区别
- 俄罗斯方块的简单实现
- 42表盘直径是从哪测量_表盘直径多大合适,怎样测量手表表盘的直径
- python视觉识别库_机器视觉、模式识别库汇总
- java dispatcher详解_Java Web开发详解:RequestDispatcher接口
- AngularJS的$destory用法
- MTK方案上基于Android N拦截黑名单中的短/彩信的方法
热门文章
- 结合Unity开发中一些编程基础概念与原理性知识总结
- 妈妈生了我,ChatGPT淘汰了我爸爸
- 详解WAVE音频文件格式
- Port already in use: 1099(1099端口被占用的问题)
- 操作系统实验--存储管理--页面置换算法--FIFO and LRU c++实现
- c#图像相似度比较demo
- 企业微信JS-SDK引用(java后台,vue前端)
- MacOS 安装 Maven
- C++进阶(语法篇)—第11章 设计模式(3)
- java毕业生设计法律知识分享平台计算机源码+系统+mysql+调试部署+lw