java unrar 乱码_JAVA使用 java-unrar-0.3.jar 解压rar,并且解决中文乱码
有个项目需要解压rar,上网搜索一下大家都在用 java-unrar-0.3.jar ,于是写了一个util方法解压rar
public static void unrar(String srcPath,String unrarPath,boolean incRarDir) throws RarException, IOException{
unrar(new File(srcPath), unrarPath, incRarDir);
}
public static void unrar(File srcFile,String unrarPath,boolean incRarDir) throws RarException, IOException{
if(StringUtil.isEmptyString(unrarPath)){
unrarPath = srcFile.getParentFile().getPath();
}
if(incRarDir){
File dir = new File(unrarPath+"/"+FileUtil.getFileNameWithoutType(srcFile.getName()));
dir.mkdir();
unrarPath = dir.getPath();
}
System.out.println("unrar file to :"+unrarPath);
FileOutputStream fileOut;
File file;
Archive rarfile = new Archive(srcFile);
FileHeader entry = rarfile.nextFileHeader();
while(entry!=null){
String entrypath = entry.getFileNameString().trim();
entrypath=entrypath.replaceAll("\\\\", "/");
file = new File(unrarPath+"/"+entrypath);
System.out.println("unrar entry file :"+file.getPath());
if(entry.isDirectory()){
file.mkdirs();
}else{
File parent = file.getParentFile();
if(parent!=null && !parent.exists()){
parent.mkdirs();
}
fileOut = new FileOutputStream(file);
rarfile.extractFile(entry, fileOut);
fileOut.close();
}
entry = rarfile.nextFileHeader();
}
rarfile.close();
}
经过验证,解压包中如果没有中文名是正常的,但是一旦带有中文名就出现乱码了,看了一下FileHeader类的方法提示,发现有个isUnicode的方法,估计是用来判断文件名是不是Unicode字符的,而且还有一个方法获得压缩包里的文件名的 getFileNameW,经过反复试验,应该这样写才能解决乱码问题
String entrypath = "";
if(entry.isUnicode()){//Unicode文件名使用getFileNameW
entrypath = entry.getFileNameW().trim();
}else{
entrypath = entry.getFileNameString().trim();
}
乱码问题解决
最后附上正确的使用源码和 java-unrar-0.3.jar
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import de.innosystec.unrar.Archive;
import de.innosystec.unrar.exception.RarException;
import de.innosystec.unrar.rarfile.FileHeader;
public class RARUtil {
public static void unrar(String srcPath,String unrarPath,boolean incRarDir) throws RarException, IOException{
unrar(new File(srcPath), unrarPath, incRarDir);
}
public static void unrar(File srcFile,String unrarPath,boolean incRarDir) throws RarException, IOException{
if(StringUtil.isEmptyString(unrarPath)){
unrarPath = srcFile.getParentFile().getPath();
}
if(incRarDir){
File dir = new File(unrarPath+"/"+FileUtil.getFileNameWithoutType(srcFile.getName()));
dir.mkdir();
unrarPath = dir.getPath();
}
System.out.println("unrar file to :"+unrarPath);
FileOutputStream fileOut;
File file;
Archive rarfile = new Archive(srcFile);
FileHeader entry = rarfile.nextFileHeader();
while(entry!=null){
String entrypath = "";
if(entry.isUnicode()){
entrypath = entry.getFileNameW().trim();
}else{
entrypath = entry.getFileNameString().trim();
}
entrypath=entrypath.replaceAll("\\\\", "/");
file = new File(unrarPath+"/"+entrypath);
System.out.println("unrar entry file :"+file.getPath());
if(entry.isDirectory()){
file.mkdirs();
}else{
File parent = file.getParentFile();
if(parent!=null && !parent.exists()){
parent.mkdirs();
}
fileOut = new FileOutputStream(file);
rarfile.extractFile(entry, fileOut);
fileOut.close();
}
entry = rarfile.nextFileHeader();
}
rarfile.close();
}
}
java unrar 乱码_JAVA使用 java-unrar-0.3.jar 解压rar,并且解决中文乱码相关推荐
- JAVA解压压缩包后的中文乱码问题
java代码对于zip压缩包的解压.压缩等等操作,建议使用zip4j.相关的文章有很多,不再赘述.此处只讨论解压缩之后可能出现的中文乱码问题. 问题代码: public static void unZ ...
- java zipfile用法_Java使用ZipFile类实现Zip文件解压
java.util.zip.ZipFile类用于从 ZIP 文件读取条目. 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称.是否为目录等信息.可以使用这个类来实现将zip文件进行解压操作 ...
- Android 解压Zip文件,中文乱码
参考自:中文乱码 直接上代码: package com.xxx.utils;import android.util.Log;import java.io.BufferedInputStream; im ...
- c# ZipFile.Extract解压后,文件名中文乱码
c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码 using (var zip = ...
- Linux系统解压zip包出现中文乱码问题
我们在Linux系统中解压zip包时,如果zip包中包含中文文件或者中文路径时,解压时会出现中文乱码的情况,如下: 这时我们获取支援或者文件时会找不到,从而报错. 是因为我们在Windows系统中进行 ...
- java nio 从内存读信息_JAVA使用NIO技术按行读写大文件并且完美解决中文乱码问题...
packagecom.chillax.imp;importjava.io.File;importjava.io.IOException;importjava.io.RandomAccessFile;i ...
- 【原创】通俗易懂地解决中文乱码问题(1) --- 跨平台乱码
[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 参考文章: (1)[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 (2)https://www.cnblogs.com/xi ...
- java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...
JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...
- java zip解压 中文_java解压ZIP 解决中文乱码 (GBK和UTF-8)
java解压ZIP 解决中文乱码 (GBK和UTF-8) 工具使用 : zip4j GitHub : zip4j 版本 : 2.2.8 Maven : net.lingala.zip4j zip4j ...
最新文章
- 网络模型 - 随机网络,无标度网络,分层网络
- vim 如何出创建工程目录
- 【控制】系统典型环节及其拉氏变换并绘制阶跃响应曲线和脉冲响应曲线
- java单元测试算初级_Java____Eclipse下JUnit单元测试(初级)
- java对象怎么创建_java对象是怎么创建出来的
- jQuery得事件绑定
- 超详细的Java面试题总结(一)之Java基础知识篇
- Shell 脚本实例
- 20155324 《信息安全系统设计基础》课程总结
- 3台机器配置hadoop集群_复制Hadoop集群之后无法访问端口50070的问题
- skype安卓手机版_安卓手机版电视直播播放器
- 互联网公司的几种销售模式
- Salesforce Apex 触发器学习记录
- 怎么把不能编辑的qlv转换成mp4
- 怎么攻击天猫商家 java,天猫店铺被恶意攻击,大家看看是怎么做的。
- 台式计算机后面的端口示意图,如何识别戴尔台式 PC 上的集成视频端口
- Unity3d 计算日期差、时间差
- java ssm集装箱码头TOS系统调度模块的设计与实现
- 【步兵 c++】教科书般的A*寻路算法
- 自学python---03_Spur计算工具开发
热门文章
- GD32官方固件库(标准外设库)下载
- 学习笔记14--环境感知传感器技术之毫米波雷达
- day10、2 - 小小综合实验升级
- 阿里国际站全球直播,短周期变现渠道受追捧
- 沧小海基于xilinx srio核的学习笔记之第五章 Rapidio协议详述
- android定时开关机源码,定时关机程序及源码(易语言)-带设置自动启动功能
- Python入门进阶:68 个 Python 内置函数详解
- uni-app快速上手顺序
- appium元素定位之元素定位工具 什么是uiautomatorviewer,uiautomatorviewer是干嘛的
- [dp]HDOJ4960 	Another OCD Patient