内容简介

本文主要介绍使用junrar来提取rar压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下。

支持v4及以下版本压缩文件,不支持v5及以上。

在rar文件上右键,查看属性,在压缩文件标签页下,可以看到压缩算法版本,如下图:

压缩时,选择使用RAR4版本来压缩,如下图:

junrar

在GitHub中的地址:https://github.com/junrar/junrar

在Pom文件中的引用

<dependency>
<groupId>com.github.junrar</groupId>
<artifactId>junrar</artifactId>
<version>4.0.0</version>
</dependency>

实现代码(仅供参考,请根据实现情况来修改)

/**
* 将压缩文件中指定后缀名称的文件解压到指定目录
* @param compressFile 压缩文件
* @param baseDirectory 解压到的基础目录(在此目录下创建UUID的目录,存入解压的文件)
* @param decompressSuffs 要提取文件的后缀名
* @return
*/
@Override
public void decompressToDirectory(File compressFile, String baseDirectory, List<String> decompressSuffs) throws Exception{
List<AttachFile> attachFileList = new ArrayList<>(); //验证压缩文件
boolean isFile = compressFile.isFile();
if (!isFile){
System.out.println(String.format("compressFile非文件格式!",compressFile.getName()));
return null;
}
String compressFileSuff = FileUtil.getFileSuffix(compressFile.getName()).toLowerCase();
if (!compressFileSuff.equals("rar")){
System.out.println(String.format("[%s]文件非rar类型的压缩文件!",compressFile.getName()));
return null;
} //region 解压缩文件(rar)
Archive archive = null;
try{
archive = new Archive(compressFile,null);
if (archive == null){return null;}
FileHeader fh = archive.nextFileHeader();
while (fh!=null){
if (fh.isDirectory()) { // 文件夹
continue;
}
else{
String rarEntryName = fh.getFileNameW().trim().equals("") ? fh.getFileNameString().trim() : fh.getFileNameW().trim();
//过滤非指定后缀文件
String suff = FileUtil.getFileSuffix(rarEntryName).toLowerCase();
if (decompressSuffs != null && decompressSuffs.size() > 0){
if (decompressSuffs.stream().filter(s->s.equals(suff)).collect(Collectors.toList()).size() <= 0){
fh = archive.nextFileHeader();
continue;
}
}
//创建解压目录(如果复制的代码,这里会报错,没有StrUtil,这里就是创建了一个目录来存储提取的文件,你可以换其他方式来创建目录)
String groupId = StrUtil.getUUID();
File group = new File(baseDirectory + groupId);
if(!group.exists()){
group.mkdirs();
}
String outPath = (baseDirectory + groupId + File.separator + rarEntryName).replaceAll("\\*", "/");
File out = new File(outPath);
FileOutputStream os = new FileOutputStream(out);
archive.extractFile(fh, os);
os.close(); }
fh = archive.nextFileHeader();
}
}
catch (Exception e){
e.printStackTrace();
}
finally {
archive.close();
}
//endregion
}

java 提取(解压)rar文件中特定后缀的文件并保存到指定目录的更多相关文章

  1. java 提取(解压)zip文件中特定后缀的文件并保存到指定目录

    内容简介 本文主要介绍使用ZipFile来提取zip压缩文件中特定后缀(如:png,jpg)的文件并保存到指定目录下. 导入包:import java.util.zip.ZipFile; 如需添加对r ...

  2. Java解压和压缩带密码的zip或rar文件(下载压缩文件中的选中文件、向压缩文件中新增、删除文件)

    JAVA 实现在线浏览管理zip和rar的工具类 (有密码及无密码的)以及下载压缩文件中的选中文件(向压缩文件中新增.删除文件) 这是之前的版本 JAVA 解压压缩包中指定文件或实现压缩文件的预览及下 ...

  3. 在Ubuntu系统中解压rar和zip文件的方法

    大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分 ...

  4. java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)

    // java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...

  5. CentOS解压rar文件

    默认不能解压rar文件. 进官网下载:http://www.rarsoft.com/download.htm RAR 5.40 for Linux x64 安装: # tar -zxvf rarlin ...

  6. 使用C#压缩解压rar和zip格式文件

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

  7. Linux解压rar、zip、war、tar文件

    在Linux上解压常见文件的命令: rar文件:rar e xxx.rar zip文件:unzip -xzvf xxx.zip war包:jar -xvf xxx.war tar包:tar -xzvf ...

  8. Linux解压rar文件

    Linux解压rar文件(unrar安装和使用,分卷解压) windows平台很多压缩文档为rar文件,那么怎么做到Linux解压rar文件(unrar安装和使用)? 简单,centos5安装unra ...

  9. linux解压rar压缩文件

    服务器是阿里云的 centos 默认linux是没有安装解压rar,zip的软件的.而网上找到的yum install命令也没有用.而且这个rar并不是免费的,只有40天的试用期...真是坑啊 由于用 ...

随机推荐

  1. httpRequest.CookieContainer= cookie 与 httpRequest.Headers.Add("Cookie", cookie)

    这两天做了一个获取cookie并且携带此cookie去请求另外一个url地址,中间携带cookie用了两种方式:1. httpRequest.CookieContainer= cookie (此coo ...

  2. 分享知识-快乐自己:虚拟机 NET 网络配置

    第一步: 第二步: 第三步:   第四步:   第五步: 第六步: 第七步: 第九步: 第十步: 第十一步: 第十二步:   第十三步: 成功. 第十四步:开启开机自启动网路连接 cd /etc/sy ...

  3. 十六 Django框架,信号

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时,触发一个信号函数 1.Django内置信 ...

  4. Java_异常_04_ OutOfMemoryError系列

    二.参考资料 1.铁猫 OutOfMemoryError系列(1): Java heap space OutOfMemoryError系列(2): GC overhead limit exceeded ...

  5. 素数环:NYOJ--488--dfs||hdu-1016-Prime Ring Problem

    /* Name: NYOJ--488--素数环 Author: shen_渊 Date: 15/04/17 15:30 Description: DFS,素数打个表,37以内就够用了 */ #incl ...

  6. Mex混合编程专题一:Mex环境搭建

    使用Matlab时间长了,难免会碰到使用mex文件的经历,不管是别人的还是自己的,就比如MatConvNet(http://www.vlfeat.org/matconvnet/)使用了混合编程的技术实 ...

  7. Uva 10820 Send a Table(欧拉函数)

    对每个n,答案就是(phi[2]+phi[3]+...+phi[n])*2+1,简单的欧拉函数应用. #include<iostream> #include<cstdio> # ...

  8. IE input 去掉文本框的叉叉和密码输入框的眼睛图标

    ::-ms-clear, ::-ms-reveal{display: none;}

  9. 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器

    使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来. 首先,看一下最经典的参考文献: How to set up your own private RTMP serv ...

  10. Agc003_E Sequential operations on Sequence

    传送门 题目大意 $1,2...n,n$个数从小到大排列,有$m$此操作,每次操作给定一个参数$x$,将当且数列作为循环节无限地展开下去,再取前$x$个作为新的数列,求最终的数列每个数出现的次数. $ ...