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 打zip压缩包 解压缩包Eclipse项目20111011 java 打zip压缩包 解压缩包Eclipse项目20111011java 打zip压缩包 解压缩包Eclipse项目20111011
java android中压缩与解压缩 的简单实用方法
实现JAVA解压缩带密码的RAR压缩包,支持中文,支持Window、Linux平台
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
使用Java远程上传压缩包到服务器,或者在服务器上拉去压缩包或者文件,在服务器上创建目录。
Java中递归逻辑循环调用解压zip里面所有的压缩包 Java中递归逻辑循环调用解压zip里面所有的压缩包
楼上兄弟太黑,特意找的源码,2分处理,完美解决Java加密解密zip文件
java源码:文件压缩解压缩包 Commons Compress.rar
基于Java的文件压缩解压缩包 Commons Compress.zip
基于java的文件压缩解压缩包 Commons Compress.zip
cloudcanal解压缩包文件
提供两种资源方式:(JDK1.8压缩包64位Windows版本)上面JDK1.8压缩包直接下载(解压一下就可以用),想自己下载的下方官网网址自行查找 官网下载地址:https://www.oracle.com/java/technologies/downloads/ JDK...
基于java的开发源码-文件压缩解压缩包 Commons Compress.zip
基于Java的实例源码-文件压缩解压缩包 Commons Compress.zip
自己提取的压缩包 jdk 内有配置文档及图片照着文档配置即可成功。 将下载好的jdk解压,然后通过配置系统环境变量指向该文件即可。 右击我的电脑(计算机)——属性——高级系统设置 第一步:新建JAVA_HOME变量。点击...
java 解压zip,rar文件 ,java 解压缩包,把压缩包的文件及文件夹的子文件全部压到指定目录
java 中压缩ZIP格式源码,仅供参考。
就是简单的组合所有的关键字,穷举法尝试,使用了zip4j_1.3.2.jar来进行解压
java项目中常使用到的工具类:zip压缩解压缩、rar解压(有密码的文件)、gz解压、FTP上传与下载