才发现java库没有对rar5压缩算法实现,网上找了一大堆资料,基本都是调用命令的方式,要集成到项目里是很麻烦的,所以一直奔着java解压rar5的目标去找,终于在github上找到了已经实现好的库,希望能帮到大家。

这个库实际是github官方自己实现的,估计是内部项目需要。

按照我下面的步骤就轻松可以完成:

1.pom中添加以下依赖:

<!-- https://mvnrepository.com/artifact/com.github.axet/java-unrar --><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>

2.java中解压rar5文件的例子:

package rar5;import java.io.IOException;
import java.io.RandomAccessFile;import net.sf.sevenzipjbinding.IInArchive;
import net.sf.sevenzipjbinding.SevenZip;
import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;public class RAR5Test {public static void main(String[] args) throws IOException {String rarDir = "D:\\keys\\rar5.rar";String outDir = "D:\\keys\\rar5";RandomAccessFile randomAccessFile = null;IInArchive inArchive = null;// 第一个参数是需要解压的压缩包路径,第二个参数参考JdkAPI文档的RandomAccessFilerandomAccessFile = new RandomAccessFile(rarDir, "r");inArchive = SevenZip.openInArchive(null, new RandomAccessFileInStream(randomAccessFile));int[] in = new int[inArchive.getNumberOfItems()];for (int i = 0; i < in.length; i++) {in[i] = i;}inArchive.extract(in, false, new ExtractCallback(inArchive, "366", outDir));}
}

3.自己编写回调ExtractCallback

package rar5;import net.sf.sevenzipjbinding.*;import java.io.*;public class ExtractCallback implements IArchiveExtractCallback {private int index;private String packageName;private IInArchive inArchive;private String ourDir;public ExtractCallback(IInArchive inArchive, String packageName, String ourDir) {this.inArchive = inArchive;this.packageName = packageName;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 {this.index = index;final String path = (String) inArchive.getProperty(index, PropID.PATH);final boolean isFolder = (boolean) inArchive.getProperty(index, PropID.IS_FOLDER);return new ISequentialOutStream() {public int write(byte[] data) throws SevenZipException {try {if (!isFolder) {System.out.println(path);File file = new File(ourDir + path);save2File(file, data);}} catch (Exception e) {e.printStackTrace();}return data.length;}};}@Overridepublic void prepareOperation(ExtractAskMode arg0) throws SevenZipException {}@Overridepublic void setOperationResult(ExtractOperationResult extractOperationResult) throws SevenZipException {String path = (String) inArchive.getProperty(index, PropID.PATH);boolean isFolder = (boolean) inArchive.getProperty(index, PropID.IS_FOLDER);
//        if(ZipUtils.checkOnlyGetDir(path) && !isFolder){
//            if (extractOperationResult != ExtractOperationResult.OK) {
//                StringBuilder sb = new StringBuilder();
//                sb.append("解压").append(packageName).append("包的").append(path).append("文件");
//                sb.append("失败!");
//                log.error(sb.toString());
//            }
//        }}public static boolean save2File(File file, byte[] msg) {OutputStream fos = null;try {File parent = file.getParentFile();boolean bool;if ((!parent.exists()) && (!parent.mkdirs())) {return false;}fos = new FileOutputStream(file);fos.write(msg);fos.flush();return true;} catch (FileNotFoundException e) {return false;} catch (IOException e) {File parent;return false;} finally {if (fos != null) {try {fos.close();} catch (IOException e) {}}}}}

好了,就这么简单。

java解压rar5 兼容rar4相关推荐

  1. java解压rar5 兼容rar4(改bug)

    本篇是为修改原作者bug,原作者:java解压rar5 兼容rar4_So straw?-CSDN博客 在我测试时发现bug,此方法 public int write(byte[] data) thr ...

  2. JAVA解压RAR5压缩包

    import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader; import java.io.File; import java.io. ...

  3. Java解压rar5压缩文件

    使用代码解压压缩文件,并指定解压后路径 导入依赖 <dependency><groupId>com.github.axet</groupId><artifac ...

  4. gz解压java,java 解压gz

    场景: java解压gz文件,这个是在linux下实验过的 下面是网上的代码 http://www.iteye.com/topic/894879 import java.io.FileInputStr ...

  5. java zip malformed_关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    关于Java解压文件的一些坑及经验分享 就在本周, 测试人员找到我说现上的需求文档(zip格式的)无法预览了, 让我帮忙看看怎么回事. 这个功能也并不是我做的, 于是我便先看看线上日志有没有什么错误, ...

  6. Java解压Jar文件

    今天写点java解压jar文件的东西,以前项目中用到过,很简单... java中有专门的文件类型对应jar文件,那就是JarFile,用于从任何可以使用java.io.RandomAccessFile ...

  7. java解压报错java.io.IOException: failed to skip current tar entry

    #java解压出现java.io.IOException: failed to skip current tar entry 当使用如下函数解压: AntBuilder antBuilder = ne ...

  8. Java解压文件Zip,War,Tar,TarGz格式

    Java压缩和解压缩 压缩和解压缩依赖 关于Java解压Zip文件的java.lang.IllegalArgumentException:MALFORMED报错问题. 解压缩代码 Zip解压缩 War ...

  9. java 解压tgz文件

    java 解压tgz文件 pom 引入依赖 <dependency><groupId>org.apache.commons</groupId><artifac ...

最新文章

  1. 我去!一周内,在闲鱼上被疯狂转了2.6万次的架构课程,现在免费!(限时领)...
  2. Vbox在Linux 5上安装Oracle 11gR2 RAC
  3. 5G NGC — 会话管理模型 — 基于 Flow 的 QoS 模型
  4. Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!]
  5. java8 lambda 接口_Java8新特性之一:Lambda表达式
  6. webpack4开始使用
  7. 蓝桥杯 ALGO-39 算法训练 数组排序去重
  8. 如何安装2个版本的python
  9. java自动化测试案例简介_接口自动化测试实例
  10. 数字核心 驱动转型:SAP S/4HANA 数字化转型论坛 - 杭州站 即刻报名
  11. cmake使用介绍【转】
  12. Winodws10 system进程占用磁盘100%
  13. Ubuntu 11.04 安装配置过程
  14. 深圳大学计算机单招,2016年深圳大学美术单招校考时间
  15. geotools中等值面的生成与OL3中的展示
  16. 怎么添加扫描仪到计算机快捷键,Win7系统添加扫描仪快捷方式的方法
  17. Microsoft Office 2016出现Excel文件打不开解决方法
  18. 2020目前比较流行的网站开发框架
  19. vmware15pro
  20. android九宫格点击打开功能,Android Studio 实现九宫格功能

热门文章

  1. unity 实现游戏——牧师与魔鬼
  2. JSP的基础使用及应用案例
  3. javaee java_JavaEE:JavaEE技术组成
  4. 地址传送指令LEA,LDS,LES;
  5. 《Naturalization Module in Neural Networks for Screen Content Image Quality Assessment》解读
  6. Egret List
  7. 解锁新姿势-使用TensorRT部署pytorch模型
  8. 运算放大器的相位裕度(PM)
  9. starry 20.1.30
  10. 免疫性属于计算机病毒特征码,基于免疫和代码重定位的计算机病毒特征码提取与检测方法.doc...