项目中有需要解压zip包,但是网上搜了下,工具类过于局限,故整理一个万能的解压zip的工具类。如果大家有更好的方式欢迎交流!

工具类1:

/*** 解压文件到指定目录** @param zipFile 压缩文件* @param descDir 指定目录*/
public static void unZipFiles(File zipFile, String descDir) throws IOException {File pathFile = new File(descDir);if (!pathFile.exists()) {Assert.state(pathFile.mkdirs(), "无法创建目录/文件:" + pathFile);}/** ZipFile类用于从zip文件中读取条目* getEntries()返回ZIP文件条目中的枚举*/ZipFile zip = new ZipFile(zipFile);for (Enumeration entries = zip.getEntries(); entries.hasMoreElements(); ) {ZipEntry entry = (ZipEntry) entries.nextElement();//解决Linux乱码entry.setUnixMode(644);String zipEntryName = entry.getName();log.debug(zipEntryName);InputStream in = zip.getInputStream(entry);String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");//判断路径是否存在,不存在则创建文件路径File file = new File(outPath.substring(0,      outPath.lastIndexOf(File.separator)));if (!file.exists()) {Assert.state(file.mkdirs(), "无法创建目录/文件:" + file.getAbsolutePath());}//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压if (new File(outPath).isDirectory()) {continue;}OutputStream out = new FileOutputStream(outPath);byte[] buf = new byte[BUFFER_SIZE];int len;//Java获取byte数值保存到指定目录while ((len = in.read(buf)) > 0) {out.write(buf, 0, len);}in.close();out.close();}log.info("*******************解压完毕********************");
}

局限点:只支持解压zip包中只包含文件,不包含文件夹的zip

工具类2:

/*** 解压文件到指定目录** @param zipFile 压缩文件* @param descDir 指定目录*/
public static void unZipFiles(File zipFile, String descDir) throws IOException {File pathFile = new File(descDir);if (!pathFile.exists()) {Assert.state(pathFile.mkdirs(), "无法创建目录/文件:" + pathFile);}/** ZipFile类用于从zip文件中读取条目* getEntries()返回ZIP文件条目中的枚举*/ZipFile zip = new ZipFile(zipFile);for (Enumeration entries = zip.getEntries(); entries.hasMoreElements(); ) {ZipEntry entry = (ZipEntry) entries.nextElement();//解决Linux乱码entry.setUnixMode(644);String zipEntryName = entry.getName();log.debug(zipEntryName);InputStream in = zip.getInputStream(entry);String outPath = (descDir + zipEntryName).replaceAll("\\*", "/");//判断路径是否存在,不存在则创建文件路径File file = new File(outPath.substring(0, outPath.lastIndexOf("/")));if (!file.exists()) {Assert.state(file.mkdirs(), "无法创建目录/文件:" + file.getAbsolutePath());}//判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压if (new File(outPath).isDirectory()) {continue;}OutputStream out = new FileOutputStream(outPath);byte[] buf = new byte[BUFFER_SIZE];int len;//Java获取byte数值保存到指定目录while ((len = in.read(buf)) > 0) {out.write(buf, 0, len);}in.close();out.close();}log.info("*******************解压完毕********************");
}

局限点:只能解压zip包下为文件夹的zip

工具类3:(推荐)

/*** 解压文件到指定目录,包含解压带文件夹和不带文件夹的zip(万能)** @param srcFile 压缩文件* @param destDirPath 指定目录*/
public static void unZipFilesSecond(File srcFile,String destDirPath) throws Exception {if (!srcFile.exists()) {throw new Exception(srcFile.getPath() + "所指文件不存在");}//创建压缩文件对象ZipFile zipFile = new ZipFile(srcFile);log.info("*******************开始解压********************");Enumeration<?> entries = zipFile.getEntries();while (entries.hasMoreElements()) {ZipEntry entry = (ZipEntry) entries.nextElement();// 如果是文件夹,就创建个文件夹if (entry.isDirectory()) {String dirPath = destDirPath + "/" + entry.getName();srcFile.mkdirs();} else {// 如果是文件,就先创建一个文件,然后用io流把内容copy过去File targetFile = new File(destDirPath + "/" + entry.getName());// 保证这个文件的父文件夹必须要存在if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();// 将压缩文件内容写入到这个文件中InputStream is = zipFile.getInputStream(entry);FileOutputStream fos = new FileOutputStream(targetFile);int len;byte[] buf = new byte[1024];while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);}// 关流顺序,先打开的后关闭fos.close();is.close();}}log.info("*******************解压完毕********************");
}

可以解压zip包下含有文件和文件夹的zip

java 万能解压zip工具类相关推荐

  1. java压缩解压文件工具类

    controller中使用 @PostMapping(value = "/importZip")public Result<?> importExcel(HttpSer ...

  2. Java递归解压zip压缩包

    场景:zip压缩包里面嵌套多层文件夹或者zip压缩包: 使用递归的方式进行解压,解压后得到的目录结构和压缩包目录结构完全一致,非常好用! package com.zhh.api.util;import ...

  3. java代码解压ZIP文件

    1.ZipInputStream类可读取ZIP压缩格式的文件,包括已压缩和未压缩的条目(entry).ZipInputStream类的构造方法如下:ZipInputStream(InputStream ...

  4. java 解压文件_java实现解压zip文件,(亲测可用)!!!!!!

    项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...

  5. java读取zip文件名_java无需解压zip压缩包直接读取包内的文件名(含中文)

    java自带了java.util.zip工具可以实现在不解压zip压缩包的情况下读取包内文件的文件名:(注:只能是ZIP格式的,rar我试了不行)代码如下: public static String ...

  6. java csv文件tozip后损坏_java上传并下载以及解压zip文件有时会报文件被损坏错误分析以及解决...

    情景描述: 1.将本地数据备份成zip文件: 2.将备份的zip文件通过sftp上传到文件服务器: 3.将文件服务器上的zip文件下载到运行服务器: 4.将下载的zip文件解压到本地(文件大小超过50 ...

  7. java util zip.zipexc,JAVA解压zip压缩文件的实例

    今天在弄一个东西,需要在PL/SQL中解压zip的压缩包,刚开始的时候是想着直接在PLSQL中调用java,在java里面调用unzip的shell命令来解析压缩文件,但是比较悲剧,一直老是失败,在尝 ...

  8. java解压zip与rar

    这两天,因为项目需要,涉及到文件夹的上传,想了很久,在网上也找了一些资料,都没有什么很好的办法,都是用插件之类的解决,后面就想到了上传压缩 文件,说到压缩文件,自然就会遇到,文件的解压缩问题,大家都知 ...

  9. android解压zip文件进度条,Android实现文件解压带进度条功能

    解压的工具类 package com.example.videodemo.zip; public class ZipProgressUtil { /*** * 解压通用方法 * * @param zi ...

最新文章

  1. mega_[MEGA DEAL]完整的Java捆绑包(96%折扣)
  2. Keras情感分析(Sentiment Analysis)实战---自然语言处理技术
  3. 经验之谈:Linux运维工程师所需技能
  4. AcWing 831. KMP字符串(模板)
  5. 从头学习MVC4基础之视图
  6. 后端开发常用框架文档及中文翻译
  7. ssis 循环导入数据_使用集成服务(SSIS)包从Amazon S3 SSIS存储桶导入数据
  8. 店铺二维码:如何生成大众点评二维码
  9. android平板8英寸,8英寸安卓系统 Newpad P10平板电脑评测
  10. Redis 数据操作
  11. 剖析:谈谈微信小游戏的成功点
  12. 齐岳生物化学交联剂稳定融合蛋白
  13. 浅谈来自德国的电子分类系统eCl@ss
  14. 网络工程师的职业技术要求
  15. 一起设计一个Android倒计时组件
  16. 什么是科技项目验收测试?验收测试报告怎么出具?
  17. 【原生JS】写滚动指定位置展示动画
  18. FFT幅度谱为什么不对,需要较正
  19. 恭喜信必优通过ISO20000认证
  20. GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别!

热门文章

  1. 域名信息备案管理系统php,工信部备案系统域名变更已启用新域名
  2. spring boot配置Jackson详解
  3. 投资30亿美元 IBM启动云计算大数据芯片研究计划
  4. 『推荐』一款让搜索更快捷的油猴脚本
  5. 【Vant相关知识】
  6. python监控键盘按下事件_Python如何监控键盘按了什么键
  7. Web点播播放器1.0——腾讯sdk网页点播播放器
  8. canoe的下载安装【亲测】
  9. 华硕(ASUS)枪神系列出厂系统win10/11原厂OEM系统
  10. 医疗行业怎么做数据防泄露