2019独角兽企业重金招聘Python工程师标准>>>

##1. 两种java实现zip文件解压方式

  • 使用JDK的原生类java.util.zip,上代码:
import java.util.zip.*;
import java.io.*;public class UnzipTest {public static void main(String[] args) {if (args.length != 1) {System.out.println("请输入正确参数:java UnzipTest 需解压的文件(e.g. d:/test.zip)");} else {Unzip unzip = new Unzip();if (unzip.unzip(args[0])) {System.out.println("文件解压成功。");} else {System.out.println("文件解压失败。");}}    }
}class Unzip {public Unzip() {}/** @param srcZipFile 需解压的文件名* @return  如果解压成功返回true*/public boolean unzip(String srcZipFile) {boolean isSuccessful = true;try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcZipFile));ZipInputStream zis = new ZipInputStream(bis);BufferedOutputStream bos = null;//byte[] b = new byte[1024];ZipEntry entry = null;while ((entry=zis.getNextEntry()) != null) {String entryName = entry.getName();bos = new BufferedOutputStream(new FileOutputStream("d:/" + entryName));int b = 0;while ((b = zis.read()) != -1) {bos.write(b);}bos.flush();bos.close();}zis.close();} catch (IOException e) {isSuccessful = false;}return isSuccessful;}
}

这种解压方式会出现中文文件名乱码的问题。

  • 另一种实现zip文件解压的方式,使用 ant.jar 的org.apache.tools.zip包,上代码:
import java.io.*;
import java.util.Enumeration;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.mockito.internal.util.io.IOUtil;public class Unzip {private static final String ENCODE = "UTF-8";/** @param zipDir目标文件存放地,zipFile带解压文件* @return  如果解压成功返回true*/public static boolean unzip(String zipDir, String zipFile) {ZipFile zfile = null;InputStream is = null;OutputStream os = null;try{zfile = new ZipFile(zipFile);Enumeration<?> zList = zfile.getEntries();ZipEntry ze = null;byte[] buf = new byte[1024];while (zList.hasMoreElements()){ze = (ZipEntry) zList.nextElement();if (ze.isDirectory()){/*// 获得当前时间DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");// 转换为字符串String formatDate = format.format(new Date());// 随机生成文件编号int random = new Random().nextInt(10000);*/File f = new File(zipDir + ze.getName());f.mkdir();continue;}os = new BufferedOutputStream(new FileOutputStream(getRealFileName(zipDir, ze.getName())));is = new BufferedInputStream(zfile.getInputStream(ze));int readLen = 0;while ((readLen = is.read(buf, 0, 1024)) != -1){os.write(buf, 0, readLen);}IOUtil.closeQuietly(is);IOUtil.closeQuietly(os);}zfile.close();return true;}catch (IOException e){e.printStackTrace();}finally{IOUtil.closeQuietly(is);IOUtil.closeQuietly(os);try{if (null != zfile){zfile.close();}}catch (IOException ex){// ignoreSystem.out.println(ex);}}return false;}/*** 给定根目录,返回一个相对路径所对应的实际文件名.** @param baseDir*            指定根目录* @param absFileName*            相对路径名,来自于ZipEntry中的name* @return java.io.File 实际的文件*/public static File getRealFileName(String baseDir, String absFileName){String[] dirs = absFileName.split("/");File ret = new File(baseDir);if (dirs.length > 1){for (int i = 0; i < dirs.length - 1; i++){ret = new File(ret, dirs[i]);}if (!ret.exists())ret.mkdirs();ret = new File(ret, dirs[dirs.length - 1]);return ret;}ret = new File(ret, dirs[dirs.length - 1]);return ret;}
}

ant.jar的maven依赖

<dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.10.1</version>
</dependency>

第二种方法可以避免中文文件名乱码的问题。

转载于:https://my.oschina.net/799835984/blog/1476570

Java实现Zip文件解压相关推荐

  1. linux 解压文件乱码,云服务器:解决linux下zip文件解压乱码问题

    云服务器:解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时 ...

  2. linux php 压缩中文乱码,linux下zip文件解压乱码问题的解决办法分享

    本篇文章主要介绍了解决linux下zip文件解压乱码问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/ ...

  3. linux中zip文件编码错误,解决linux下zip文件解压乱码问题

    原标题:解决linux下zip文件解压乱码问题 解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此, ...

  4. [转载] python zip 文件解压中文乱码问题解决

    参考链接: Python zip() 今天突然碰到zip文件解压后中文乱码问题.百度了下觉得这篇文章不错.保存保存. 来源:http://blog.sina.com.cn/s/blog_5805e98 ...

  5. 解压文件到服务器是什么意思,linux中zip文件解压命令是什么

    linux中zip文件解压命令是什么 发布时间:2020-10-15 14:35:15 来源:亿速云 阅读:102 作者:小新 这篇文章给大家分享的是有关linux中zip文件解压命令是什么的内容.小 ...

  6. android zip文件读写,【Android】Zip文件解压方法

    android中zip文件解压 public class ZipUtil { /** * 解压到指定路径 * * @param inputStream * @param outPathString * ...

  7. C++实现解zip解压缩功能:将一个目录内的内容打包到zip文件以及将zip文件解压到某个目录(windows平台)

    本例用来简单实现windows平台下如何将一个目录下的文件压缩到指定的zip文件中,亦或是将一个zip文件的内容解压缩到某个目录. 以下是源码,代码中的注释解释了相关操作,一看就懂. 注: 本例将这两 ...

  8. java gz压缩文件解压

    java gz压缩文件解压 gzFileName压缩文件全路径 targetFileName解压后的文件全路径 public boolean unGzFile(String gzFileName,St ...

  9. java zip文件解压(含有密码解压)

    maven需要加入以下依赖: <dependency><groupId>net.lingala.zip4j</groupId><artifactId>z ...

最新文章

  1. 2020年涨薪26-30%,能实现吗?18%数据科学家是这么期待的
  2. php文件上传绕过mime类型,文件上传限制绕过技巧
  3. layui分页limit不显示_小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题...
  4. Android传感器编程带实例
  5. python3 yield 大文件_详解Python3中yield生成器的用法
  6. P2216 [HAOI2007]理想的正方形(二维RMQ)
  7. 最大子数组 ——算法导论
  8. x86 x64 arm64的区别
  9. json数据类型基本转换
  10. 如何使用 OpManager 进行磁盘空间监控?
  11. m2 ngff无线网卡接口的笔记本电脑加装苹果网卡,完美安装苹果mac OS
  12. 给自己记录下申请免费域名的过程
  13. 读书印记 - 《自私的基因》
  14. 背英语句子,来巧记单词
  15. [高通SDM450][Android9.0]CTA认证--去掉彩信、短信、通话功能
  16. 基于Php门禁系统设计与实现
  17. Day2--正则表达式
  18. JS原型和原型链(图解)
  19. C++关于函数声明 函数实现
  20. [模块]EC11旋转编码器

热门文章

  1. UA MATH575B 数值分析下I 梯度下降
  2. mysql安装和服务相关问题总结
  3. oracle批处理脚本学习总结
  4. C# Win32 API 应用
  5. Kaggle: House Prices: Advanced Regression Techniques
  6. linux进程篇 (二) 进程的基本控制
  7. MSTAR GAMMA
  8. apache2.4配置虚拟主机
  9. 使用Windows的分析等待链(analyze wait chain)来诊断没用响应的应用
  10. 更新WordPress4.0访问速度慢问题解决办法