import java.io.File;
import java.io.FileOutputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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 Decompression {
public static void main(String[] args) {
try {
Decompression.deCompress("E:\\工作区\\kettle demo.rar", "E:\\");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解压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 fileName = fh.getFileNameW().trim();
if (!existZH(fileName)) {
fileName = fh.getFileNameString().trim();
}
String destFileName = "";
String destDirName = "";
// 非windows系统
if (File.separator.equals("/")) {
destFileName = destDir
+ fileName.replaceAll("\\\\", "/");
destDirName = destFileName.substring(0,
destFileName.lastIndexOf("/"));
// windows系统
} else {
destFileName = destDir
+ fileName.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")) {
Decompression.unzip(sourceFile, destDir);
} else if (type.equals("rar")) {
Decompression.unrar(sourceFile, destDir);
} else {
throw new Exception("只支持zip和rar格式的压缩包!");
}
}
public static boolean existZH(String str) {
String regEx = "[\\u4e00-\\u9fa5]";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
return true;
}
return false;
}
}
分享到:
相关推荐
java 解压代码 超级详细 能解压多个文件和文件夹
### 核心知识点:Java解压缩 #### 1. 使用`ZipFile`类进行解压缩 在Java中,`java.util.zip`包提供了处理ZIP文件的功能,其中`ZipFile`类用于读取ZIP文件。`ZipFile`对象可以遍历ZIP文件中的所有条目(`ZipEntry`...
java 打zip压缩包 解压缩包Eclipse项目20111011 java 打zip压缩包 解压缩包Eclipse项目20111011java 打zip压缩包 解压缩包Eclipse项目20111011
在Java编程环境中,处理RAR压缩包并对其进行解压是一个常见的任务,特别是在自动化脚本或数据迁移等场景下。本文将详细介绍如何使用Java实现这个功能,特别是处理带密码保护的RAR文件,同时支持中文文件名,并能在...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
在这个场景中,我们关注的是如何使用Java来实现文件压缩包的上传以及在服务器上的解压缩。Java作为一种强大的编程语言,提供了丰富的库来支持这样的操作,特别是在涉及到SFTP(Secure File Transfer Protocol)时,...
"Java从压缩包中提取文件.rar"这个资源包含了一些Java代码示例,重点在于如何在Java程序中从压缩包(如RAR或ZIP)中提取文件。Swing是Java的一个图形用户界面(GUI)库,用于创建桌面应用程序,而工具类则是一些预先...
JAVA源码文件压缩解压缩包CommonsCompress
java资源文件压缩解压缩包 Commons Compress提取方式是百度网盘分享地址
在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...
就是简单的组合所有的关键字,穷举法尝试,使用了zip4j_1.3.2.jar来进行解压
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包
在Java编程环境中,处理ZIP格式的压缩包是一项常见的任务,无论是为了读取文件内容、打包文件还是进行数据传输。本文将深入探讨如何使用Java来解压ZIP格式的压缩包,并提供相关的源码参考。 首先,我们需要了解Java...
在解压缩"jdk1.8_161"这个文件后,您将得到Java 8的安装包。根据您的操作系统(Windows、Linux或macOS),您需要按照相应的步骤配置环境变量,确保系统能够识别和使用Java 8。例如,在Windows上,您可能需要设置`...
6. 压缩和解压缩:Java同样提供了`ZipOutputStream`和`ZipInputStream`,用于创建新的ZIP文件或将ZIP文件解压缩到内存或文件系统。`ZipOutputStream`接收一个输出流,然后可以通过调用`putNextEntry(ZipEntry)`、`...
Java 源码:文件压缩解压缩包 Commons Compress 是一个强大的开源库,它提供了对多种文件压缩格式的支持。这个库是由 Apache 软件基金会开发的,是 Java 平台上处理压缩和归档文件的标准工具之一。在 Java 开发中,...
这个"java11_64_bin.zip"压缩包中包含的是Windows 64位版本的JDK 11,"openjdk-11+28_windows-x64_bin"就是具体文件名,意味着这是OpenJDK 11的第28个构建版本,OpenJDK是Java的开源实现,与Oracle JDK在功能上基本...
在Java中,可以使用`java.util.zip.GZIPOutputStream`来压缩数据,`java.util.zip.GZIPInputStream`来解压缩。`GZUtil.java`可能包含了压缩和解压缩GZ文件的相关方法。 4. **FTP工具类**: FTP(文件传输协议)常...