package decompress;
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格式的压缩包!");
}
}
}
分享到:
相关推荐
总的来说,解压缩ZIP和RAR格式的文件在Java中可以通过标准库或第三方库轻松实现,理解并掌握I/O流和压缩流的使用是关键。在开发过程中,确保代码的健壮性和灵活性,同时考虑性能优化,例如批量解压缩、多线程处理等...
以下是一个使用此库进行RAR解压缩的示例: ```java import org.apache.commons.compress.archivers.rar.RarArchiveEntry; import org.apache.commons.compress.archivers.rar.RarArchiveInputStream; import org....
本文将详细介绍标题和描述中提到的几个关键知识点:Java中的zip、rar(包括处理带密码的RAR文件)、gz压缩,以及FTP工具类的使用。 1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件...
"Java实现的zip压缩及解压缩...本示例中,我们详细地介绍了Java实现的zip压缩及解压缩工具类,包括压缩文件和解压缩文件的实现原理和使用方法。该工具类可以用于各种Java应用程序中,例如文件上传、下载、备份等场景。
详解java解压缩zip和rar的工具类使用教程直接上代码 package decompress; import java.io.File; import java.io.FileOutputStream; import org.apache.tools.ant.Project; import org.apache.tools.ant...
接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...
本文将详细介绍如何使用Java语言实现ZIP和RAR格式文件的压缩与解压缩操作。文章通过具体的代码示例展示了整个处理流程,并针对不同格式文件的特点进行了优化。 #### ZIP文件的压缩与解压缩 ##### 压缩原理与API...
在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...
"解压缩工具类"这个标题指的是一个特定的Java类库,它提供了解压缩功能,方便开发者在项目中快速实现对压缩文件(如ZIP或RAR)的处理。这类工具类通常封装了与解压缩相关的复杂操作,使得开发者无需深入了解底层细节...
在解压缩"jdk1.8_161"这个文件后,您将得到Java 8的安装包。根据您的操作系统(Windows、Linux或macOS),您需要按照相应的步骤配置环境变量,确保系统能够识别和使用Java 8。例如,在Windows上,您可能需要设置`...
首先,让我们看看如何解压缩ZIP文件。解压缩过程主要涉及到 `ZipInputStream` 类,它是 `InputStream` 的子类,可以读取ZIP格式的数据。以下是一个简单的解压示例: ```java import java.io.*; import java.util....
在Java编程语言中,实现RAR压缩与解压缩是一项常见的任务,尤其在处理大量数据或打包文件以便于传输时。本文将深入探讨如何使用Java来实现这个功能,主要关注`FileUtil.java`文件中的代码实现。 首先,Java本身并不...
通过调用上述代码,解压缩ZIP和RAR文件,然后检查`demo.txt`是否成功解压并内容无误。 通过结合这两个库,我们可以创建一个全面的文件解压缩工具箱,覆盖了大部分常见的压缩格式。同时,注意处理各种编码问题,确保...
这个示例展示了如何使用Apache Commons Compress库进行.zip文件的解压缩和压缩操作。请注意,对于.rar和.7z文件,你需要根据具体库的文档进行相应调整。 总的来说,Java处理.zip、.rar和.7z文件时,需依赖第三方库...
此外,如果你需要在命令行环境中使用ant.jar,可以编写一个简单的Ant构建文件(build.xml),并使用`unzip`任务来解压缩ZIP文件。例如: ```xml <unzip src="path/to/your.zip" dest="output/directory"/> `...
Java解压缩功能主要依赖于`java.util.zip`包提供的工具类,如`ZipFile`和`ZipEntry`。通过合理的编码和流操作,可以高效、准确地完成ZIP文件的解压缩任务。同时,要注意处理文件名的编码问题,确保在各种环境中都能...
总的来说,“解压缩加密工具类 SSSS”是安全和实用性兼备的工具,能够满足用户对数据隐私和安全性的高要求。在数字化时代,这样的工具对于个人和企业来说都是不可或缺的数据管理助手。正确使用并妥善保管密钥,将有...
本文将深入探讨如何使用Java来解压缩RAR文件,同时会提到一个名为Chilkat Java的第三方库,该库提供了方便的API来处理RAR文件。 首先,Java标准库(JDK)并不直接支持RAR文件的处理。虽然内置的`java.util.zip`包...
在Java编程语言中,处理...通过以上这些知识点,你可以构建一个强大的Java工具类,实现ZIP和RAR文件的压缩与解压缩,包括处理加密的ZIP文件。这个工具类可以是项目中一个可靠的助手,提高代码的可重用性和可维护性。
7. **压缩与解压缩**: 在Java中,除了ZIP,还有GZIP和Deflater算法。GZIP适用于单个文件的压缩,而Deflater是低级别API,可以直接处理字节流,用于自定义压缩需求。 8. **跨平台**: Java的“一次编写,到处运行”...