import java.io.File;
import java.io.FileOutputStream;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import de.innosystec.unrar.Archive;
import de.innosystec.unrar.rarfile.FileHeader;
public class DeCompressUtil {
/**
* 解压zip格式压缩包
* 对应的是ant.jar
*/
private static void unzip(String sourceZip,String destDir) throws Exception{
try{
Project p = new Project();
Expand e = new Expand();
e.setProject(p);
e.setSrc(new File(sourceZip));
e.setOverwrite(false);
e.setDest(new File(destDir));
/*
ant下的zip工具默认压缩编码为UTF-8编码,
而winRAR软件压缩是用的windows默认的GBK或者GB2312编码
所以解压缩时要制定编码格式
*/
e.setEncoding("gbk");
e.execute();
}catch(Exception e){
throw e;
}
}
/**
* 解压rar格式压缩包。
* 对应的是java-unrar-0.3.jar,但是java-unrar-0.3.jar又会用到commons-logging-1.1.1.jar
*/
private static void unrar(String sourceRar,String destDir) throws Exception{
Archive a = null;
FileOutputStream fos = null;
try{
a = new Archive(new File(sourceRar));
FileHeader fh = a.nextFileHeader();
while(fh!=null){
if(!fh.isDirectory()){
//1 根据不同的操作系统拿到相应的 destDirName 和 destFileName
String compressFileName = fh.getFileNameString().trim();
String destFileName = "";
String destDirName = "";
//非windows系统
if(File.separator.equals("/")){
destFileName = destDir + compressFileName.replaceAll("\\\\", "/");
destDirName = destFileName.substring(0, destFileName.lastIndexOf("/"));
//windows系统
}else{
destFileName = destDir + compressFileName.replaceAll("/", "\\\\");
destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));
}
//2创建文件夹
File dir = new File(destDirName);
if(!dir.exists()||!dir.isDirectory()){
dir.mkdirs();
}
//3解压缩文件
fos = new FileOutputStream(new File(destFileName));
a.extractFile(fh, fos);
fos.close();
fos = null;
}
fh = a.nextFileHeader();
}
a.close();
a = null;
}catch(Exception e){
throw e;
}finally{
if(fos!=null){
try{fos.close();fos=null;}catch(Exception e){e.printStackTrace();}
}
if(a!=null){
try{a.close();a=null;}catch(Exception e){e.printStackTrace();}
}
}
}
/**
* 解压缩
*/
public static void deCompress(String sourceFile,String destDir) throws Exception{
//保证文件夹路径最后是"/"或者"\"
char lastChar = destDir.charAt(destDir.length()-1);
if(lastChar!='/'&&lastChar!='\\'){
destDir += File.separator;
}
//根据类型,进行相应的解压缩
String type = sourceFile.substring(sourceFile.lastIndexOf(".")+1);
if(type.equals("zip")){
DeCompressUtil.unzip(sourceFile, destDir);
}else if(type.equals("rar")){
DeCompressUtil.unrar(sourceFile, destDir);
}else{
throw new Exception("只支持zip和rar格式的压缩包!");
}
}
}
分享到:
相关推荐
该压缩包包含的主文件是`java-unrar-0.3.jar`,这是一个Java类库,包含了处理RAR文件所需的所有类和方法。开发者可以将这个JAR文件引入到他们的项目中,通过调用相应的API来实现对RAR文件的操作。 在Java中处理RAR...
`java-unrar-0.3.jar`提供了API,开发者可以通过调用相关方法来实现RAR文件的打开、遍历、解压等功能,这对于需要处理RAR文件的Java应用来说是必不可少的工具。 接下来,我们讨论`commons-logging-1.1.1.jar`。这是...
1. **java-unrar-0.3.jar**: 这是一个开源的Java库,允许开发者在Java程序中读取和解压RAR文件。这个库实现了RAR文件格式的解析,使得Java程序员可以访问RAR文件的内容,包括提取文件、遍历目录结构等操作。它不支持...
以下是一个简单的使用`java-unrar-0.3.jar`库解压RAR文件的Java代码示例: ```java import com.igormaznitsa.junrar.Archive; import com.igormaznitsa.junrar.UnrarEventConsumer; import ...
Java-unrar-0.3是一个基于Java的库,专门用于解压RAR文件格式。RAR是一种流行的压缩格式,由RARlab开发,通常用于在Windows环境中压缩和分发文件。然而,由于Java的跨平台特性,Java-unrar库使得在Java应用程序中...
总之,"java-unrar-0.3.jar"和"commons-logging-1.1.1.jar"为Java开发者提供了处理RAR文件的强大工具,使得在Java环境中解压RAR文件变得简单易行,同时通过Commons Logging提供了灵活的日志记录机制。在项目中正确...
在这个场景中,我们关注的是三个特定的Java库:`java-unrar-0.5.jar`、`commons-logging-1.2.jar`和`ant-1.6.5.jar`,它们在处理ZIP和RAR文件的解压过程中起着关键作用。 首先,`java-unrar-0.5.jar`是一个Java库,...
java-unrar-0.3.jar java写的用来解压rar zip文件的工具类 无需安装解压程序 兼容windows、linux两大系统
此库基于"java-unrar-0.3.jar"进行优化和升级,增强了功能和稳定性。要使用该库,需要将其加入到项目的类路径(classpath)中,这样在编译和运行时,Java虚拟机就可以找到并调用库中的方法。 解压RAR文件的基本步骤...
java 解压 rar 文件,压缩包为测试工程,包含 java-unrar-0.3.jar
在给出的标题和描述中,提到了几个常用的Java jar包,分别是:activation.jar、logging、java-unrar-0.3.jar、javolution.jar和junit-3.8.jar。每个jar包都有其特定的功能和用途,下面将详细介绍这些jar包及其相关的...
本文将深入探讨如何使用Java实现RAR压缩和解压,以及如何利用提供的jar包(java-unrar-0.3.jar和ant.jar)进行操作,并结合`DeCompressUtil.java`提供的示例代码来理解其实现。 首先,`java-unrar-0.3.jar`是一个...
Java UnRAR库是一个开源项目,用于在Java环境中解压RAR文件。这个"jukka-java-unrar-ef84fa7"版本可能是该库的一个特定提交或版本号,ef84fa7可能是Git仓库中的一个哈希值,用于标识代码的特定历史状态。这个版本比...
《UNRAR 3.54源代码解析与技术探讨》 UNRAR 3.54是RAR文件解压缩工具的一个重要版本,其源代码的公开为开发者提供了深入了解RAR压缩算法和解压缩机制的机会。这篇文章将深入探讨这个版本的源代码,解析其中的关键...
本篇文章将深入探讨如何在Java中解压jar包,以及与之相关的`java unrar 0.3`库的使用。 首先,我们要了解什么是jar包。JAR(Java Archive)文件是Java平台的标准打包格式,它将多个类文件、资源文件和其他元数据...
java解压zip或rar压缩文件 包括源码和所需要的jar包:apache ant.jar 和 java-unrar-0.3.jar zip文件解压(要使用apache ant....rar文件解压(要使用java-unrar-0.3.jar) 具有处理中文乱码功能 代码都有备注,很好懂!
1. **添加依赖**:将`java-unrar-0.3.jar`库添加到你的项目类路径中,如果是Maven或Gradle项目,需要在相应的配置文件中声明依赖。 2. **创建RarFile对象**:首先,你需要通过`RarFile`类加载RAR文件。 3. **遍历...
此外,还需要引入`commons-logging-1.1.1.jar`库,因为`java-unrar-0.3.jar`依赖于这个日志库。 2. **实现代码** 下面是一个解压RAR文件的示例代码: ```java private static void unrar(String sourceRar, ...