java zip解压缩-阿里云开发者社区

开发者社区> 黄威的世界> 正文

java zip解压缩

简介:
+关注继续查看

Java 中如何进行zip包的解压缩呢?

有两种方式:

(1)使用jdk 自带的zip工具

(2)使用apache旗下的commons-compress

我下面要讲解的zip解压缩助手使用的是apache旗下的commons-compress.

工具运行界面如下:

 核心代码:

解压:

Java代码  收藏代码
  1. /*** 
  2.      * 解压zip 
  3.      *  
  4.      * @param zipFile 
  5.      * @param decompressLoc 
  6.      *            :解压之后的文件所在目录 
  7.      * @throws ArchiveException 
  8.      * @throws IOException 
  9.      */  
  10.     public static boolean deCompressRecursion(String zipFile,  
  11.             File decompressLoc, String charSet) throws ArchiveException,  
  12.             IOException {  
  13.         FileInputStream fin = new FileInputStream(zipFile);  
  14.         ArchiveInputStream archIns = new ArchiveStreamFactory()  
  15.                 .createArchiveInputStream(ArchiveStreamFactory.ZIP, fin);  
  16.         ZipArchiveInputStream zipIn = (ZipArchiveInputStream) archIns;  
  17.         boolean isSuccess = deCompressRecursion(zipIn, decompressLoc, charSet);  
  18.         zipIn.close();  
  19.         return isSuccess;  
  20.     }  
  21. /*** 
  22.      * 递归解压缩. 
  23.      *  
  24.      * @param zipIn 
  25.      * @param decompressLoc 
  26.      * @return 
  27.      * @throws IOException 
  28.      */  
  29.     private static boolean deCompressRecursion(ZipArchiveInputStream zipIn,  
  30.             File decompressLoc, String charset) throws IOException {  
  31.         ZipArchiveEntry zipEntry;  
  32.         if (ValueWidget.isNullOrEmpty(charset)) {  
  33.             charset = SystemHWUtil.CHARSET_UTF;  
  34.         }  
  35.         while (!ValueWidget.isNullOrEmpty(zipEntry = zipIn.getNextZipEntry())) {  
  36.             byte[] rawName = zipEntry.getRawName();  
  37.             String fileName = new String(rawName, charset);  
  38.             // System.out.println(fileName);  
  39.             if (zipEntry.isDirectory()) {// 是目录  
  40.                 File newFolder = new File(decompressLoc, fileName);// 若子目录不存在,则创建之  
  41.                 System.out.println(newFolder.getAbsolutePath());  
  42.                 if (!newFolder.exists()) {  
  43.                     newFolder.mkdir();  
  44.                 }  
  45.                 // deCompressRecursion(zipIn, decompressLoc,charset);  
  46.             } else {// 是普通文件  
  47.                 File singFile = new File(decompressLoc, fileName);  
  48.                 System.out.println(singFile.getAbsolutePath());  
  49.                 if (singFile.exists()) {// 若解压后的文件已经存在,则直接退出  
  50.                     GUIUtil23.warningDialog("File \""  
  51.                             + singFile.getAbsolutePath() + "\" does  exist.");  
  52.                     return false;  
  53.                 }  
  54.                 /** 
  55.                  * 以下四行代码是后来添加的,为了解决父目录不存在的问题 
  56.                  */  
  57.                 File fatherFolder = singFile.getParentFile();  
  58.                 if (!fatherFolder.exists()) {  
  59.                     fatherFolder.mkdirs();  
  60.                 }  
  61.                 FileUtils.writeIn2Output(zipIn, new FileOutputStream(singFile),  
  62.                         truefalse);  
  63.             }  
  64.         }  
  65.         return true;  
  66.     }  

 

压缩:

Java代码  收藏代码
  1. /*** 
  2.      * 压缩文件. 
  3.      *  
  4.      * @param zipFile 
  5.      * @param folderPaths 
  6.      * @return 
  7.      * @throws ArchiveException 
  8.      * @throws IOException 
  9.      */  
  10.     public static boolean compressZipRecursion(String zipFile,  
  11.             String folderPaths) throws ArchiveException, IOException {  
  12.         FileOutputStream fou = new FileOutputStream(zipFile);  
  13.         ArchiveOutputStream archOuts = new ArchiveStreamFactory()  
  14.                 .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou);  
  15.         if (archOuts instanceof ZipArchiveOutputStream) {  
  16.             ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts;  
  17.             List<ZipArchiveEntry> zipEntrys = getZipFileListRecursion(new File(  
  18.                     folderPaths), null);  
  19.             for (int i = 0; i < zipEntrys.size(); i++) {  
  20.                 ZipArchiveEntry zipEntry2 = zipEntrys.get(i);  
  21.                 zipOut.putArchiveEntry(zipEntry2);  
  22.                 File file = new File(folderPaths, zipEntry2.getName());  
  23.                 if (!file.exists()) {  
  24.                     return false;  
  25.                 }  
  26.                 if (!file.isDirectory()) {  
  27.                     FileInputStream fin = new FileInputStream(file);  
  28.                     // 不要关闭zipOut,关闭之前要执行closeArchiveEntry()  
  29.                     FileUtils.writeIn2Output(fin, zipOut, falsetrue);  
  30.                 }  
  31.             }  
  32.             closeZip(zipOut, true);  
  33.   
  34.         }  
  35.         return true;  
  36.     }  
  37. /*** 
  38.      * 压缩之后的收尾操作. 
  39.      *  
  40.      * @param zipOut 
  41.      * @throws IOException 
  42.      */  
  43.     private static void closeZip(ZipArchiveOutputStream zipOut,  
  44.             boolean iscloseArchiveEntry) throws IOException {  
  45.         if (iscloseArchiveEntry) {  
  46.             zipOut.closeArchiveEntry();// it is necessary  
  47.         }  
  48.         zipOut.flush();  
  49.         zipOut.finish();  
  50.         zipOut.close();  
  51.     }  

 上述代码见类:com.common.util.CompressZipUtil

项目名:zip_mgmt

项目源代码见附件:zip_mgmt.zip

项目使用maven 构建

IDE:eclipse

依赖的jar包:(1)io0007-find_progess-0.0.8-SNAPSHOT.jar

(2)is_chinese

学习笔记见附件java zip压缩.zip

 

 

参考:http://m.blog.csdn.net/blog/buyaore_wo/7047343

http://www.cnblogs.com/un4sure/archive/2011/09/27/2193298.html,

http://hw1287789687.iteye.com/blog/1976309

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
zip 数据压缩
压缩与解压都是针对字节数组来进行的。 内存数据压缩 java.util.zip.DeflaterOutputStream 压缩步骤 1.创建一个ByteArrayOutputStream byteArrayOutputStream; 2.调用DeflaterOutputStream deflaterOutputStream=DeflaterOutputStrea
1026 0
http gzip解压缩
问题: 入问题,问题答案立即呈现在您眼前! 寻找gzip 获取一个网页数据返回的编码类型是gzip,我该怎么解压缩 HTTP头获取? 如何用vb获取网络上的xml文件,并解析内容 关于GZIP的解码 怎样解gzip的压缩 请问Wininet是否可以进行Gzip的http传输,尤其...
923 0
squid配合nginx的gzip压缩的完美解决方案
Squid3.0之前,一直不能完美支持http1.1。所以对gzip内容的支持,始终有很多问题。我也看过很多帖子,号称解决了这个问题。但是其实一直没有把问题说清楚。我今天试着把问题的原因和解决方法彻底说清楚。
812 0
【可下载】C#中关于zip压缩解压帮助类的封装
C#中关于zip压缩解压帮助类的封装         之前一个同学问了这个问题后,看了园子里其它园友的封装,都很零碎,调用也不是很方便。所以自己就封装了一个zip解压的类。后来想整理下怕自己忘了。就把压缩的类也一并封装了。
1157 0
实例 : Linux系统 centos8 文件打包、解包、压缩、解压缩
Linux 系统环境文件打包、解包、压缩、解压缩
51 0
C#使用Gzip解压缩完整读取网页内容
using System; using System.Threading; using System.Text; using System.Text.RegularExpressions; using System.
1248 0
+关注
黄威的世界
我是一个热衷IT技术的人,希望自己不断地设计开发出对别人非常有用的软件。有近7年的java开发经验(包括2年Android开发经验)和一年左右的linux使用经验。擅长Java Web后台开发 ,喜欢研究新的各种实用技术
668
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载