有个项目需要解压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(); } }
相关推荐
1. **java-unrar-0.3.jar**: 这是一个开源的Java库,允许开发者在Java程序中读取和解压RAR文件。这个库实现了RAR文件格式的解析,使得Java程序员可以访问RAR文件的内容,包括提取文件、遍历目录结构等操作。它不支持...
Java-unrar-0.3.jar 和 Commons-Logging-1.1.1.jar 是两个在Java开发中常用的库文件,它们分别提供了对RAR文件处理和日志记录的支持。 首先,我们来了解一下`java-unrar-0.3.jar`。这是一个开源的Java库,允许...
Java-unrar-0.3.zip 是一个专门为Java开发者设计的RAR文件解压缩工具包,它允许程序员在Java环境中处理RAR格式的压缩文件,而无需在系统中安装WinRAR这样的外部软件。这个工具包的主要功能是提供API接口,使得Java...
总之,"java-unrar-0.3.jar"和"commons-logging-1.1.1.jar"为Java开发者提供了处理RAR文件的强大工具,使得在Java环境中解压RAR文件变得简单易行,同时通过Commons Logging提供了灵活的日志记录机制。在项目中正确...
以下是一个简单的使用`java-unrar-0.3.jar`库解压RAR文件的Java代码示例: ```java import com.igormaznitsa.junrar.Archive; import com.igormaznitsa.junrar.UnrarEventConsumer; import ...
java-unrar-0.3.jar java写的用来解压rar zip文件的工具类 无需安装解压程序 兼容windows、linux两大系统
Java-unrar-0.3是一个基于Java的库,专门用于解压RAR文件格式。RAR是一种流行的压缩格式,由RARlab开发,通常用于在Windows环境中压缩和分发文件。然而,由于Java的跨平台特性,Java-unrar库使得在Java应用程序中...
例如,使用Ant定义一个构建脚本,它首先调用`java-unrar-0.5.jar`来解压RAR文件,然后利用`commons-logging-1.2.jar`记录解压过程中的日志信息。这种组合方式既实现了RAR文件的解压,又保证了日志记录的便利性,同时...
总的来说,java-unrar-0.5.jar是一个方便的Java库,让开发者能够在Java程序中无缝地处理RAR文件,实现解压和读取功能,这对于那些需要处理RAR文件的Java应用程序来说,无疑提供了一种强大的解决方案。
"java-unrar-0.2.jar" 是一个Java库,主要用于解压RAR格式的压缩文件。这个库为Java开发者提供了一个方便的API,让他们能够集成到自己的应用程序中,实现对RAR文件的操作,如读取、提取文件以及浏览RAR档案的内容。 ...
当这两个库结合使用时,例如在处理RAR文件并需要记录操作日志的场景下,`java-unrar-0.5.jar` 负责读取和解压RAR文件,而`apache-commons-logging.jar` 则负责记录这些操作的详细信息,如解压过程中的错误、警告或...
unrar-0.3.tar.gz
总的来说,这个压缩包提供的“java-unrar-0.5.jar”是一个Java实现的RAR文件处理库,能够帮助开发者在纯Java环境中处理RAR格式的压缩文件,简化了开发流程,并且避免了与其他平台依赖的解压缩软件交互的复杂性。...
首先,"unRar-0.5.jar"是专门为Java设计的一个开源库,它提供了对RAR文件操作的API,允许开发者在Java程序中直接对RAR文件进行解压。此库基于"java-unrar-0.3.jar"进行优化和升级,增强了功能和稳定性。要使用该库,...
linux解压缩包,rpm直接安装,可以用unrar命令解压rar后缀的文件 unrar e test.rar 解压文件到当前目录 unrar x test.rar /path/to/extract unrar l test.rar 查看rar中的文件 unrar v test.rar 更详细 unrar t ...
下载后,用户需要先使用解压缩工具(如unrar)解压文件,解压后得到的是libaio-0.3.105-2.i386.rpm这个RPM(Red Hat Package Manager)格式的软件包。 RPM是一种广泛应用于RHEL(Red Hat Enterprise Linux)、...
网上大部分都是java-unrar-0.3.jar,我找到了官网最新的是0.7版本,放一个镜像在这里分享一下