`
lannerK
  • 浏览: 50888 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA使用 java-unrar-0.3.jar 解压rar,并且解决中文乱码

    博客分类:
  • JAVA
阅读更多

有个项目需要解压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();
        
	}


}

 

2
3
分享到:
评论
4 楼 lannerK 2013-08-19  
jz20110918 写道
FileUtil.getFileNameWithoutType(srcFile.getName())); 这个方法是从哪里得到的????

不好意思,这个方法是我另外一个util类的,你可以自己实现,意思是从文件名中获取没有文件类型后缀的文件名称
3 楼 jz20110918 2013-08-02  
FileUtil.getFileNameWithoutType(srcFile.getName())); 这个方法是从哪里得到的????
2 楼 lannerK 2013-07-04  
yixiandave 写道
可以处理加密的rar吗

不可以,但是能够判断文件是否被加密,
Archive类有个isEncrypted的方法
1 楼 yixiandave 2013-07-03  
可以处理加密的rar吗

相关推荐

    java-unrar-0.3.jar以及commons-logging-1.1.1.jar

    1. **java-unrar-0.3.jar**: 这是一个开源的Java库,允许开发者在Java程序中读取和解压RAR文件。这个库实现了RAR文件格式的解析,使得Java程序员可以访问RAR文件的内容,包括提取文件、遍历目录结构等操作。它不支持...

    java-unrar-0.3.jar和commons-logging-1.1.1.jar

    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-unrar-0.3.zip 是一个专门为Java开发者设计的RAR文件解压缩工具包,它允许程序员在Java环境中处理RAR格式的压缩文件,而无需在系统中安装WinRAR这样的外部软件。这个工具包的主要功能是提供API接口,使得Java...

    commons-logging-1.1.1.jar和java-unrar-0.3.jar

    总之,"java-unrar-0.3.jar"和"commons-logging-1.1.1.jar"为Java开发者提供了处理RAR文件的强大工具,使得在Java环境中解压RAR文件变得简单易行,同时通过Commons Logging提供了灵活的日志记录机制。在项目中正确...

    java解压rar 包含java-unrar-0.3.jar

    以下是一个简单的使用`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-unrar-0.3.jar java写的用来解压rar zip文件的工具类 无需安装解压程序 兼容windows、linux两大系统

    java-unrar-0.3

    Java-unrar-0.3是一个基于Java的库,专门用于解压RAR文件格式。RAR是一种流行的压缩格式,由RARlab开发,通常用于在Windows环境中压缩和分发文件。然而,由于Java的跨平台特性,Java-unrar库使得在Java应用程序中...

    java-unrar-0.5.jar、commons-logging-1.2.jar和ant-1.6.5.jar

    例如,使用Ant定义一个构建脚本,它首先调用`java-unrar-0.5.jar`来解压RAR文件,然后利用`commons-logging-1.2.jar`记录解压过程中的日志信息。这种组合方式既实现了RAR文件的解压,又保证了日志记录的便利性,同时...

    java-unrar-0.2.jar

    "java-unrar-0.2.jar" 是一个Java库,主要用于解压RAR格式的压缩文件。这个库为Java开发者提供了一个方便的API,让他们能够集成到自己的应用程序中,实现对RAR文件的操作,如读取、提取文件以及浏览RAR档案的内容。 ...

    java-unrar-0.5.jar

    总的来说,java-unrar-0.5.jar是一个方便的Java库,让开发者能够在Java程序中无缝地处理RAR文件,实现解压和读取功能,这对于那些需要处理RAR文件的Java应用程序来说,无疑提供了一种强大的解决方案。

    ant.rarjava-unrar-0.5.jar一键下载

    总的来说,这个压缩包提供的“java-unrar-0.5.jar”是一个Java实现的RAR文件处理库,能够帮助开发者在纯Java环境中处理RAR格式的压缩文件,简化了开发流程,并且避免了与其他平台依赖的解压缩软件交互的复杂性。...

    java-unrar-0.5.jar and apache-commons-logging.jar

    当这两个库结合使用时,例如在处理RAR文件并需要记录操作日志的场景下,`java-unrar-0.5.jar` 负责读取和解压RAR文件,而`apache-commons-logging.jar` 则负责记录这些操作的详细信息,如解压过程中的错误、警告或...

    unRar-0.5.jar

    首先,"unRar-0.5.jar"是专门为Java设计的一个开源库,它提供了对RAR文件操作的API,允许开发者在Java程序中直接对RAR文件进行解压。此库基于"java-unrar-0.3.jar"进行优化和升级,增强了功能和稳定性。要使用该库,...

    libaio-0.3.105-2.i386.rar

    下载后,用户需要先使用解压缩工具(如unrar)解压文件,解压后得到的是libaio-0.3.105-2.i386.rpm这个RPM(Red Hat Package Manager)格式的软件包。 RPM是一种广泛应用于RHEL(Red Hat Enterprise Linux)、...

    java-unrar-解压rar.rar

    如果你需要处理RAR5格式的文件,可能需要寻找其他解决方案,如使用JNI(Java Native Interface)调用C++的UnRAR库。 总的来说,Java-unrar库提供了一个简洁且方便的方式来在Java应用程序中解压RAR文件,极大地扩展...

    rarlinux-x64-5.6.0.tar.gz--Linux64位的RAR解压工具离线安装包

    例如,使用`rar x archive.rar`命令可以解压名为archive.rar的RAR文件。而`rar a newarchive.rar file1 file2`则可以将file1和file2文件打包成新的RAR档案newarchive.rar。 对于rarlinux-x64-5.6.0.tar.gz这个...

    junrar-0.7.jar

    网上大部分都是java-unrar-0.3.jar,我找到了官网最新的是0.7版本,放一个镜像在这里分享一下

Global site tag (gtag.js) - Google Analytics