Java实现Zip文件解压
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文件解压相关推荐
- linux 解压文件乱码,云服务器:解决linux下zip文件解压乱码问题
云服务器:解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此,导致这些zip文件在Linux下解压时 ...
- linux php 压缩中文乱码,linux下zip文件解压乱码问题的解决办法分享
本篇文章主要介绍了解决linux下zip文件解压乱码问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/ ...
- linux中zip文件编码错误,解决linux下zip文件解压乱码问题
原标题:解决linux下zip文件解压乱码问题 解决linux下zip文件解压乱码问题 原因 由于zip格式并没有指定编码格式,Windows下生成的zip文件中的编码是GBK/GB2312等,因此, ...
- [转载] python zip 文件解压中文乱码问题解决
参考链接: Python zip() 今天突然碰到zip文件解压后中文乱码问题.百度了下觉得这篇文章不错.保存保存. 来源:http://blog.sina.com.cn/s/blog_5805e98 ...
- 解压文件到服务器是什么意思,linux中zip文件解压命令是什么
linux中zip文件解压命令是什么 发布时间:2020-10-15 14:35:15 来源:亿速云 阅读:102 作者:小新 这篇文章给大家分享的是有关linux中zip文件解压命令是什么的内容.小 ...
- android zip文件读写,【Android】Zip文件解压方法
android中zip文件解压 public class ZipUtil { /** * 解压到指定路径 * * @param inputStream * @param outPathString * ...
- C++实现解zip解压缩功能:将一个目录内的内容打包到zip文件以及将zip文件解压到某个目录(windows平台)
本例用来简单实现windows平台下如何将一个目录下的文件压缩到指定的zip文件中,亦或是将一个zip文件的内容解压缩到某个目录. 以下是源码,代码中的注释解释了相关操作,一看就懂. 注: 本例将这两 ...
- java gz压缩文件解压
java gz压缩文件解压 gzFileName压缩文件全路径 targetFileName解压后的文件全路径 public boolean unGzFile(String gzFileName,St ...
- java zip文件解压(含有密码解压)
maven需要加入以下依赖: <dependency><groupId>net.lingala.zip4j</groupId><artifactId>z ...
最新文章
- 2020年涨薪26-30%,能实现吗?18%数据科学家是这么期待的
- php文件上传绕过mime类型,文件上传限制绕过技巧
- layui分页limit不显示_小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题...
- Android传感器编程带实例
- python3 yield 大文件_详解Python3中yield生成器的用法
- P2216 [HAOI2007]理想的正方形(二维RMQ)
- 最大子数组 ——算法导论
- x86 x64 arm64的区别
- json数据类型基本转换
- 如何使用 OpManager 进行磁盘空间监控?
- m2 ngff无线网卡接口的笔记本电脑加装苹果网卡,完美安装苹果mac OS
- 给自己记录下申请免费域名的过程
- 读书印记 - 《自私的基因》
- 背英语句子,来巧记单词
- [高通SDM450][Android9.0]CTA认证--去掉彩信、短信、通话功能
- 基于Php门禁系统设计与实现
- Day2--正则表达式
- JS原型和原型链(图解)
- C++关于函数声明 函数实现
- [模块]EC11旋转编码器