java解压缩

Java压缩与解压缩ZIP文件 小而美的使用JDK自带的ZIP工具包生成与解压缩ZIP文件 阅读详情
  1. Java实现Zip压缩解压可以使用JDK的原生类java.util.zip,但是JDK 7 之前存在中文文件名乱码问题。
  2. 使用 ant.jar 的org.apache.tools.zip包,可以避免乱码问题。
  3. 使用专门的压缩解压第三方组件,如zip4j,zt-zip等,这种实现方式当然更强大,不过一般场景用不到,如果只是压缩解压第2种方式足够了。
然而第三种是最简单的哈哈
下面是zt_zip的介绍。
可以看下git:https://github.com/zeroturnaround/zt-zip
也可以看下下面的讲解
 在Java平台上有很多官方的和非官方、第三方的压缩工具包,它们各有各的长处,比如Oracle官方的java.util.zip 类库,Apache网站上的Apache Commons Compress 类库,或者Chilkat Java Zip 类库,但总体说来,这些类库提供都是低级别的API,操作起来都不是很方便,而今天推荐给大家的这个叫做ZeroTurnaround(简称zt-zip)的压缩类库的特点就是方便、简易,我们可以比较一下,如果用标准的Java类库压缩一个目录里的所有文件,你需要写出的代码大概是这样:
[java]  view plain  copy
 print ?
  1. File dir = new File("demo");  
  2. ZipOutputStream out = new ZipOutputStream(new FileOutputStream("demo.zip"));  
  3. try {  
  4.   File[] files = dir.listFiles();  
  5.   for (int i = 0; i < files.length; i++) {  
  6.     File file = files[i];  
  7.     ZipEntry entry = new ZipEntry(file.getName());  
  8.     entry.setSize(file.length());  
  9.     entry.setTime(file.lastModified());  
  10.     out.putNextEntry(entry);  
  11.     FileInputStream in = new FileInputStream(file);  
  12.     try {  
  13.       IOUtils.copy(in, out);  
  14.     }  
  15.     finally {  
  16.       IOUtils.closeQuietly(in);  
  17.     }  
  18.     out.closeEntry();  
  19.    }  
  20.  } finally {  
  21.    IOUtils.closeQuietly(out);  
  22. }  


    而使用 zt-zip 工具包,你的代码就变成了只有一行:

[java]  view plain  copy
 print ?
  1. ZipUtil.pack(new File("demo"), new File("demo.zip"));  


  你不需要自己去关闭文件的数据流,这个类库的接口自动替你你做了这些。

  可能经常做Java压缩编程的人会提到另外一个压缩类库:TrueZIP,这也是一个非常好的类库,而zt-zip跟它比起来的一个优势是:消耗内存很少,这是因为TrueZIP大量的使用了虚拟机的堆内存,而zt-zip却是只是以数据流的形式进行操作,当然这也是zt-zip的API提供的功能很有针对性、不是TrueZIP API那样通用的原因。

  你可以在Github上下载这个类库

 

Examples

[java]  view plain  copy
 print ?
  1. //Unpacking  
  2.   
  3. //Check if an entry exists in a ZIP archive  
  4. boolean exists = ZipUtil.containsEntry(new File("/tmp/demo"), "foo.txt");  
  5. //Extract an entry from a ZIP archive into a byte array  
  6. byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt");  
  7. //Extract an entry from a ZIP archive into file system  
  8. ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt"new File("/tmp/bar.txt"));  
  9. //Extract a ZIP archive  
  10. ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"));  
  11. //Extract a ZIP archive which becomes a directory  
  12. ZipUtil.explode(new File("/tmp/demo.zip"));  
  13. //Extract a directory from a ZIP archive including the directory name  
  14. ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {  
  15.   public String map(String name) {  
  16.     return name.startsWith("doc/") ? name : null;  
  17.   }  
  18. });  
  19. //Extract a directory from a ZIP archive excluding the directory name  
  20. final String prefix = "doc/";   
  21. ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {  
  22.   public String map(String name) {  
  23.     return name.startsWith(prefix) ? name.substring(prefix.length()) : name;  
  24.   }  
  25. });  
  26. //Print .class entry names in a ZIP archive  
  27. ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipInfoCallback() {  
  28.   public void process(ZipEntry zipEntry) throws IOException {  
  29.     if (zipEntry.getName().endsWith(".class"))  
  30.       System.out.println("Found " + zipEntry.getName());  
  31.   }  
  32. });  
  33. //Print .txt entries in a ZIP archive (uses IoUtils from Commons IO)  
  34. ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipEntryCallback() {  
  35.   public void process(InputStream in, ZipEntry zipEntry) throws IOException {  
  36.     if (zipEntry.getName().endsWith(".txt")) {  
  37.       System.out.println("Found " + zipEntry.getName());  
  38.       IOUtils.copy(in, System.out);  
  39.     }  
  40.   }  
  41. });  


 

[java]  view plain  copy
 print ?
  1. //Packing  
  2.   
  3. //Compress a directory into a ZIP archive  
  4. ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"));  
  5. //Compress a directory which becomes a ZIP archive  
  6. ZipUtil.unexplode(new File("/tmp/demo.zip"));  
  7. //Compress a directory into a ZIP archive with a parent directory  
  8. ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"), new NameMapper() {  
  9.   public String map(String name) {  
  10.     return "foo/" + name;  
  11.   }  
  12. });  
  13. //Add an entry from file to a ZIP archive  
  14. ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt"new File("f/tmp/oo.txt"), new File("/tmp/new.zip"));  
  15. //Add an entry from byte array to a ZIP archive  
  16. ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt""bar".getBytes(), new File("/tmp/new.zip"));  
  17. //Add an entry from file and from byte array to a ZIP archive  
  18. ZipEntrySource[] entries = new ZipEntrySource[] {  
  19.     new FileSource("doc/readme.txt"new File("foo.txt")),  
  20.     new ByteSource("sample.txt""bar".getBytes())  
  21. };  
  22. ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));  
  23. //Replace a ZIP archive entry from file  
  24. boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt"new File("/tmp/foo.txt"), new File("/tmp/new.zip"));  
  25. //Replace a ZIP archive entry from byte array  
  26. boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt""bar".getBytes(), new File("/tmp/new.zip"));  
  27. //Replace a ZIP archive entry from file and byte array  
  28. ZipEntrySource[] entries = new ZipEntrySource[] {  
  29.     new FileSource("doc/readme.txt"new File("foo.txt")),  
  30.     new ByteSource("sample.txt""bar".getBytes())  
  31. };  
  32. boolean replaced = ZipUtil.replaceEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));  


 

[java]  view plain  copy
 print ?
  1. //Comparison  
  2.   
  3. //Compare two ZIP archives (ignoring timestamps of the entries)  
  4. boolean equals = ZipUtil.archiveEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"));  
  5. //Compare two ZIP archive entries with same name (ignoring timestamps of the entries)  
  6. boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo.txt");  
  7. //Compare two ZIP archive entries with different names (ignoring timestamps of the entries)  
  8. boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo1.txt""foo2.txt");  


 

 

注:本文转载自:

http://www.aqee.net/development-tools-zt-zip/

https://github.com/zeroturnaround/zt-zip


Java压缩处理类库ZeroTurnaround.zip ZeroTurnaround 简称 zt-zip , 是一个 Java 用来处理压缩包的类库。 示例代码: final String prefix = "doc/"; ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() { public String map(String name) { return name.startsWith(prefix) ? name.substring(prefix.length()) : name; } }); 首页上还包含大量的例子。 立即下载

相关推荐

ZipUtil.java

文件压缩工具类,提供有关Java的详细压缩,解压等一系列方法,方便开发者快速进行开发,易上手!

ZipUntil打包之后部分解压工具 解压时产生错误

就这个工具类,使用ZipUtil.pack方法进行打包的时候,如果你将要打包的文件是在同一目录下,不存在分层的情况,那是没有任何问题的,但是如果存在分层且!!!!文件夹名称是全中文的时候,就会存在一些问题,具体表现形式是 某些解压软件可以正常打开 例如winRAR,但是有些软件不能正常打开 例如360解压 如图 源文件 通过工具类打包过后 winRaR 打开 一切正常 非常...

hgx2014的博客 1023

ZipUtil文件压缩工具类

java中使用ZipEntry对文件目录下的所有文件进行压缩,已解决中文乱码问题,亲测可用,请放心下载。

JAVA开发经验(二):常用工具类2.3-IO-文件压缩操作类(ZipUtil

摘要说明: ZipUtil主要是整合Apache Commons Compress库中的zip操作类;主要包括zip文件压缩及解压; Apache Commons Compress软件定义了一个用于处理压缩和归档格式的API。这些包括:bzip2,gzip,pack200,lzma,xz,Snappy,传统Unix压缩,DEFLATE,DEFLATE64,LZ4,Brotli,Zstandar...

叶落自飘零的博客 1260

java 压缩文件

解压缩 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip

qq_23730715的专栏 419

用zt-zip Java库进行zip文件处理

Java 标准库本身自带java.util.zip包,利用该包可以解决zip文件的处理问题。但是该包提供的功能相对底层,想要实现zip文件的处理,需要写一 些代码,该包并没有封装API到调用一个方法就实现了压缩或者解压功能的层次。zt-zip库提供了这种上层的封装,只需要调用一个方法,可以很方便的实 现zip压缩与解压,zt-zip在底层也利用了java.util.zip包。 maven中央仓库里...

扶摇升的IT博客 2809

Android开发之Zip下载解压

本篇博客为需求而发烧,若有雷同需求code拿走不谢。 需求如下:点击Item,从服务器下载zip包到本地文件夹并解压,解压后的图片文件全部查询出来,用于界面预览 没有强制每次都下载zip包保持最新,如果有需要FileDownload有函数支持,亦可以自行添加解压后自动删除zip包 流程: 下载zip包 解压zip包 查询指定文件格式的文件路径集合(.jpg为例) 文件下载...

AnalyzeSystem的博客 5184

Java解压缩文件的方法

文件解压缩,它提供了读取 ZIP 文件内容的功能,允许你以编程方式从 ZIP 文件中提取文件和目录结构,以及读取其中的数据。我这里解压缩的时候获取了某个固定文件类型的文件路径集合,如果需要在解压缩的时候做逻辑处理,可以参考。上传一个压缩包文件,会将压缩包文件下载到本地,然后再将压缩包解压到同目录下的extracted文件夹下。每个条目代表 ZIP 文件中的一个文件或目录。2、转换为File类型时就需要先将文件存到本地,所以在这里指定了一个压缩包的文件路径。方法,你可以从 ZIP 文件中提取特定文件的内容。

Keep__Me的博客 6582

JAVA-文件解压缩

文件解压缩

正在努力的小小小白 1395

java 文件解压缩zip_java解压缩zip文件

/*提供zip文件的解压缩接口:AdapterZipFile:输入:zipFileName(zip文件的绝对路径),outputDirectory(zip文件解压缩后的存放路径)输出:说明:初始化函数unZipFile:输入:无输出:说明:解压缩zip文件,解压缩后存放到outputDirectory路径下GetZipFileList:输入:无输出:list说明:解压缩后的文件列表绝对路径存放在A...

weixin_29752389的博客 223

java 解压缩代码_关于Java解压缩的代码?

展开全部packagecom.javatest.techzero.gui;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.zip.Zip...

weixin_29738537的博客 109

Java-IO流之压缩与解压缩流详解

Java中处理文件和数据时压缩和解压缩是常见的需求,Java IO体系提供了强大的压缩和解压缩流,通过ZipOutputStream、ZipInputStream、GZIPOutputStream和GZIPInputStream等类,我们可以轻松实现文件压缩、归档和解压缩等功能。本文我将深入探讨Java压缩与解压缩流的原理、使用方法及高级应用,帮你全面掌握这一重要技术

aa_hdkf_vg的博客 1204

java解压缩工具类

Java解压缩工具类 在开发过程中,经常会遇到需要对压缩文件进行解压缩的需求,而Java提供了一些方便的工具类来帮助我们实现这一功能。本文将介绍如何使用Java解压缩工具类来解压缩文件,并展示一个简单的代码示例。 原理介绍 Java中提供了java.util.zip包和java.util.jar包来处理压缩文件。其中,ja...

weixin_40664619的博客 285

java图片压缩、解压缩

Java代码  /**   * 对图像进行压缩   * @param image 图像   * @return 图像数据包装类   * @throws ImageFormatException   * @throws IOException   * @throws IOException   */   public static ImageTransferObject

zengsky的专栏 1187

Java 解压缩流与压缩流:压缩数据的高效利器

Java 中,压缩流和解压缩流都是基于包提供的类,它们允许我们对数据进行压缩(缩小数据体积)和解压缩(还原数据)。常见的压缩算法包括 GZIP 和 ZIP,它们在 Java 中被广泛支持。Java 中的这些压缩/解压缩流通常用于处理文件和网络传输中的数据,以减少传输时间和存储空间。

Rockivy的博客 2201

Java递归解压缩

做邮件分析的时候,因为前台上传的是邮件的压缩包,在后台处理的时候需要先对压缩包进行解压缩,然后再对邮件进行提取操作。       因为压缩包的扩展名名字可是rar、7z、zip。所以需要分情况进行解压缩。而且压缩包里面可能还有压缩包,需要递归解压缩。       对于zip文件当时用的是zip4j这个jar包,rar、7z文件用的是zip4j这个jar包。maven导入外部jar包的配置文件如

Just Do It 3777

java解压缩,支持rar和zip

首先引入依赖 <!-- 解压zip --> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.10.5</version> </dependenc...

qq_29001173的博客 1716

java简单实现对文件解压缩

java简单实现对文件解压缩 我先贴代码吧! import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IO...

qq_43209531的博客 984
上一篇: 开源项目
下一篇: 给自己看看
cocos2dx3
博客等级 码龄15年 15粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值