代码:

 package com.xiaobai;

 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; public class UnZipUtils { public static void main(String[] args) {
try {
//将temp下所有的压缩文件解压
unzipFromLoc("F:\\BaiduNetdiskDownload\\03_Hadoop");
} catch (Exception e) {
e.printStackTrace();
}
} //从总目录下解压文件里所有的压缩包至目的文件路径
public static void unzipFromLoc(String filePath) throws Exception{
File file = new File(filePath);
File[] list = file.listFiles();//固定元素,不包含新产生的
String from = "";
for(File f : list){
if(f.isDirectory()) {
unzipFromLoc(f.getAbsolutePath());
}else {
boolean bool = f.isFile();
if(bool){
from = f.getAbsolutePath();
unZipFiles(new File(from),filePath);
}
}
}
} /**
* 解压文件到指定目录
* 解压后的文件名,和之前一致
* @param zipFile 待解压的zip文件
* @param descDir 指定目录
*/
public static void unZipFiles(File zipFile, String descDir) throws IOException {
try{
ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK"));//解决中文文件夹乱码
File pathFile = new File(descDir);
if (!pathFile.exists()) {
pathFile.mkdirs();
}
//即使有内层目录,目录里的文件也是可以在这里遍历出来的,只不过在内层目录之后,而且是带内层目录的全路径,所以解压时需要判断路径是否存在,
// 不存在则创建内层目录dir;判断一下内层目录,continue,目录里面的文件再写
for (Enumeration<? extends ZipEntry> entries = zip.entries(); entries.hasMoreElements();) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String zipEntryName = entry.getName();
InputStream in = zip.getInputStream(entry);
String outPath = (descDir + File.separator + zipEntryName).replaceAll("\\\\", "/");
File file = new File(outPath);
if(entry.isDirectory()) {//有内层文件夹,需要创建新的内层目录后continue,后面内层文件夹里的压缩文件才有合法新路径,否则内层文件夹里的压缩文件使用路径创建流时报拒绝访问异常,因为父目录不存在
file.mkdirs();//是文件而不是文件夹路径的不能写这个,会创建到以文件名为最终目录名的全目录导致与文件路径冲突,下面流关联文件时因读取了同名文件夹而发生异常
continue;
}
// 输出文件路径信息
System.out.println(outPath);
FileOutputStream out = new FileOutputStream(outPath);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
in.close();
out.close();
// unZipFiles(file, outPath.substring(0, outPath.lastIndexOf('/')));//可递归解压zip,jar文件,不能解压rar文件
}
System.out.println("******************解压完毕********************");
return;
}catch (Exception e) {
e.printStackTrace();
}
}
}

参考:

https://blog.csdn.net/weixin_41722928/article/details/80832481

https://blog.csdn.net/SicongFu/article/details/84997715

https://blog.csdn.net/zcc_0015/article/details/40454777

java中正则匹配反斜杠问题:

https://www.cnblogs.com/chenkeyu/p/7574924.html

最新文章

  1. 使用Servlet实现图片下载
  2. 源码搭建SVN+Apache+Setpass
  3. 把Flume的Source设置为 Spooling directory source
  4. Hartree-Fock理论(更新中)
  5. hMailserver设置外部反病毒扫描程序
  6. Objective-C通过联合存储为类增加属性及原理解析
  7. python核心编程-第四章-习题
  8. Javascript DOM 编程艺术———总结-1
  9. SpringMVC+Mybatis+MySQL8遇到的问题
  10. tf.nn.conv2d。卷积函数
  11. C++11-->单生产者,单消费者问题
  12. Spark RDD 默认分区数量 - repartitions和coalesce异同
  13. byte类型的127+1=-128?
  14. jstree API
  15. Linux定时器工具
  16. jmeter正则表达式提取器--关联
  17. 服务器端FIN的条件
  18. 根据已有的Jar包 一键生成对应的mavenpom.xml信息
  19. 【SharePoint 2010】将Sharepoint Server 2010部署到WINDOWS 7
  20. Paypal如何实现循环扣款(订阅)?

热门文章

  1. Caused by: java.lang.ClassNotFoundException: org.springframework.integration.handler.support.HandlerMethodArgumentResolversHolder
  2. mysql扩展性架构实践N库到2N 库的扩容,2变4、4变8
  3. Socket断开不报错(Java)
  4. [PCL]模型拟合方法——随机采样一致性
  5. 2019.04.16 python基础50
  6. linux运维需要掌握什么知识?linux运维学习路线
  7. kali在vbox上运行设置共享文件夹
  8. Mac vs code 快捷键
  9. c# ASP.NET Core2.2利用中间件支持跨域请求
  10. PL/SQL Block中对单引号进行转义