有个项目需要解压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,并且解决中文乱码相关推荐

  1. JAVA解压压缩包后的中文乱码问题

    java代码对于zip压缩包的解压.压缩等等操作,建议使用zip4j.相关的文章有很多,不再赘述.此处只讨论解压缩之后可能出现的中文乱码问题. 问题代码: public static void unZ ...

  2. java zipfile用法_Java使用ZipFile类实现Zip文件解压

    java.util.zip.ZipFile类用于从 ZIP 文件读取条目. 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称.是否为目录等信息.可以使用这个类来实现将zip文件进行解压操作 ...

  3. Android 解压Zip文件,中文乱码

    参考自:中文乱码 直接上代码: package com.xxx.utils;import android.util.Log;import java.io.BufferedInputStream; im ...

  4. c# ZipFile.Extract解压后,文件名中文乱码

    c#中使用ZipFile.Extract解压压缩包的时候,会出现中文文件名乱码的情况,原因是zipfile 会将所有文件名用 CP437 来编码,这就导致了中文乱码 using (var zip = ...

  5. Linux系统解压zip包出现中文乱码问题

    我们在Linux系统中解压zip包时,如果zip包中包含中文文件或者中文路径时,解压时会出现中文乱码的情况,如下: 这时我们获取支援或者文件时会找不到,从而报错. 是因为我们在Windows系统中进行 ...

  6. java nio 从内存读信息_JAVA使用NIO技术按行读写大文件并且完美解决中文乱码问题...

    packagecom.chillax.imp;importjava.io.File;importjava.io.IOException;importjava.io.RandomAccessFile;i ...

  7. 【原创】通俗易懂地解决中文乱码问题(1) --- 跨平台乱码

    [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 参考文章: (1)[原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 (2)https://www.cnblogs.com/xi ...

  8. java 中文乱码过滤器_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版...

    JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版 不用再担心java中文乱码问题,一步到位,一次性解决.更方便更快捷. web-xml配置 EncodingFilter com ...

  9. java zip解压 中文_java解压ZIP 解决中文乱码 (GBK和UTF-8)

    java解压ZIP 解决中文乱码 (GBK和UTF-8) 工具使用 : zip4j GitHub : zip4j 版本 : 2.2.8 Maven : net.lingala.zip4j zip4j ...

最新文章

  1. 网络模型 - 随机网络,无标度网络,分层网络
  2. vim 如何出创建工程目录
  3. 【控制】系统典型环节及其拉氏变换并绘制阶跃响应曲线和脉冲响应曲线
  4. java单元测试算初级_Java____Eclipse下JUnit单元测试(初级)
  5. java对象怎么创建_java对象是怎么创建出来的
  6. jQuery得事件绑定
  7. 超详细的Java面试题总结(一)之Java基础知识篇
  8. Shell 脚本实例
  9. 20155324 《信息安全系统设计基础》课程总结
  10. 3台机器配置hadoop集群_复制Hadoop集群之后无法访问端口50070的问题
  11. skype安卓手机版_安卓手机版电视直播播放器
  12. 互联网公司的几种销售模式
  13. Salesforce Apex 触发器学习记录
  14. 怎么把不能编辑的qlv转换成mp4
  15. 怎么攻击天猫商家 java,天猫店铺被恶意攻击,大家看看是怎么做的。
  16. 台式计算机后面的端口示意图,如何识别戴尔台式 PC 上的集成视频端口
  17. Unity3d 计算日期差、时间差
  18. java ssm集装箱码头TOS系统调度模块的设计与实现
  19. 【步兵 c++】教科书般的A*寻路算法
  20. 自学python---03_Spur计算工具开发

热门文章

  1. GD32官方固件库(标准外设库)下载
  2. 学习笔记14--环境感知传感器技术之毫米波雷达
  3. day10、2 - 小小综合实验升级
  4. 阿里国际站全球直播,短周期变现渠道受追捧
  5. 沧小海基于xilinx srio核的学习笔记之第五章 Rapidio协议详述
  6. android定时开关机源码,定时关机程序及源码(易语言)-带设置自动启动功能
  7. Python入门进阶:68 个 Python 内置函数详解
  8. uni-app快速上手顺序
  9. appium元素定位之元素定位工具 什么是uiautomatorviewer,uiautomatorviewer是干嘛的
  10. [dp]HDOJ4960 Another OCD Patient