软件开发工具推荐:ZeroTurnaround ZIP 类库

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
    在Java平台上有很多官方的和非官方、第三方的压缩工具包,它们各有各的长处,比如Oracle官方的 java.util.zip 类库,Apache网站上的 Apache Commons Compress 类库,或者 Chilkat Java Zip 类库,但总体说来,这些类库提供都是低级别的API,操作起来都不是很方便,而今天推荐给大家的这个叫做 ZeroTurnaround(简称zt-zip)的压缩类库的特点就是方便、简易,我们可以比较一下,如果用标准的Java类库压缩一个目录里的所有文件,你需要写出的代码大概是这样:
File dir = new File("demo");
ZipOutputStream out = new ZipOutputStream(new FileOutputStream("demo.zip"));
try {
  File[] files = dir.listFiles();
  for (int i = 0; i < files.length; i++) {
    File file = files[i];
    ZipEntry entry = new ZipEntry(file.getName());
    entry.setSize(file.length());
    entry.setTime(file.lastModified());
    out.putNextEntry(entry);
    FileInputStream in = new FileInputStream(file);
    try {
      IOUtils.copy(in, out);
    }
    finally {
      IOUtils.closeQuietly(in);
    }
    out.closeEntry();
   }
 } finally {
   IOUtils.closeQuietly(out);
}


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

ZipUtil.pack(new File("demo"), new File("demo.zip"));


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

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

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

 

Examples

//Unpacking

//Check if an entry exists in a ZIP archive
boolean exists = ZipUtil.containsEntry(new File("/tmp/demo"), "foo.txt");
//Extract an entry from a ZIP archive into a byte array
byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt");
//Extract an entry from a ZIP archive into file system
ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", new File("/tmp/bar.txt"));
//Extract a ZIP archive
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"));
//Extract a ZIP archive which becomes a directory
ZipUtil.explode(new File("/tmp/demo.zip"));
//Extract a directory from a ZIP archive including the directory name
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith("doc/") ? name : null;
  }
});
//Extract a directory from a ZIP archive excluding the directory name
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;
  }
});
//Print .class entry names in a ZIP archive
ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipInfoCallback() {
  public void process(ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".class"))
      System.out.println("Found " + zipEntry.getName());
  }
});
//Print .txt entries in a ZIP archive (uses IoUtils from Commons IO)
ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipEntryCallback() {
  public void process(InputStream in, ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".txt")) {
      System.out.println("Found " + zipEntry.getName());
      IOUtils.copy(in, System.out);
    }
  }
});


 

//Packing

//Compress a directory into a ZIP archive
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"));
//Compress a directory which becomes a ZIP archive
ZipUtil.unexplode(new File("/tmp/demo.zip"));
//Compress a directory into a ZIP archive with a parent directory
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"), new NameMapper() {
  public String map(String name) {
    return "foo/" + name;
  }
});
//Add an entry from file to a ZIP archive
ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("f/tmp/oo.txt"), new File("/tmp/new.zip"));
//Add an entry from byte array to a ZIP archive
ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));
//Add an entry from file and from byte array to a ZIP archive
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));
//Replace a ZIP archive entry from file
boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("/tmp/foo.txt"), new File("/tmp/new.zip"));
//Replace a ZIP archive entry from byte array
boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));
//Replace a ZIP archive entry from file and byte array
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
boolean replaced = ZipUtil.replaceEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));


 

//Comparison

//Compare two ZIP archives (ignoring timestamps of the entries)
boolean equals = ZipUtil.archiveEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"));
//Compare two ZIP archive entries with same name (ignoring timestamps of the entries)
boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo.txt");
//Compare two ZIP archive entries with different names (ignoring timestamps of the entries)
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

 

告别重启!IDEA里用JRebel实现Java代码热更新,保姆级配置避坑指南 本文详细介绍了如何在IDEA中使用JRebel插件实现Java代码热更新,包括安装配置、激活方案、实战避坑指南及性能优化技巧。通过JRebel的热部署功能,开发者可以告别频繁重启服务器的烦恼,显著提升开发效率。 阅读详情

相关推荐

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; } }); 首页上还包含大量的例子。

5个必学技巧:用ClosedXML轻松处理Excel文件无需安装Office

想要在.NET应用中操作Excel文件却不想依赖Microsoft Office?ClosedXML正是你需要的解决方案!这个强大的.NET库让读取、编辑和创建Excel 2007+文件变得异常简单,无需安装Excel应用程序即可完成所有操作。无论你是需要生成报表、处理数据还是自动化Excel任务,ClosedXML都能提供直观的API接口,大大简化开发流程。💪 ## 为什么选择ClosedX

gitblog_00053的博客 533

zt-zip-1.6.jar

java运行依赖jar包

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

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

扶摇升的IT博客 2809

28天GDScript编程终极指南:在浏览器中免费学习Godot游戏开发

想要掌握Godot引擎的游戏开发技能却不知从何开始?GDScript作为Godot官方脚本语言,以其简洁直观的语法成为编程新手的完美起点。现在,通过Learn GDScript From Zero项目,你可以在浏览器中免费开启游戏编程之旅,无需任何编程基础就能轻松上手。 ## 为什么选择GDScript作为你的第一门编程语言? GDScript专为游戏开发设计,语法简洁易懂,特别适合编程初学者

gitblog_00049的博客 476

软件开发工具推荐ZeroTurnaround ZIP 类库(java zip/unzip)

在Java平台上有很多官方的和非官方、第三方的压缩工具包,它们各有各的长处,比如Oracle官方的java.util.zip 类库,Apache网站上的Apache Commons Compress 类库,或者Chilkat Java Zip 类库,但总体说来,这些类库提供都是低级别的API,操作起来都不是很方便,而今天推荐给大家的这个叫做ZeroTurnaround(简称zt-zip)的压缩

jbgtwang的专栏 2058

ZeroTurnaround ZIP 库使用教程

ZeroTurnaround ZIP 库是一个用于处理 ZIP 文件的 Java 库,提供了丰富的 API 来创建、修改和提取 ZIP 文件。该库旨在简化 ZIP 文件操作,提高开发效率。 ## 项目快速启动 ### 1. 添加依赖 首先,在您的 Maven 项目中添加以下依赖: ```xml <dependency> <groupId>org.zeroturnaround</gr

gitblog_00079的博客 472

ZeroTurnaround ZIP类库

为什么80%的码农都做不了架构师?>>> ...

weixin_33860737的博客 362

ZeroTurnaround ZIP Library实战案例:轻松处理大型ZIP文件的最佳实践

ZeroTurnaround ZIP Library是一个功能强大的Java库,专为高效处理ZIP文件而设计。无论是创建、读取、修改还是解压大型ZIP文件,它都能提供简单易用的API和出色的性能表现,帮助开发者轻松应对各种ZIP文件处理场景。 ## 🚀 为什么选择ZeroTurnaround ZIP Library? 在处理ZIP文件时,开发者常常面临以下挑战: - 大型ZIP文件处理时的内

gitblog_00533的博客 658

探索ZeroTurnaround ZIP Library核心功能:文件打包、解压与条目管理全解析

ZeroTurnaround ZIP Library是一款轻量级、高效的Java ZIP处理工具,专为快速创建、修改和提取ZIP归档文件而设计。无论是磁盘文件还是内存流操作,它都能提供简洁易用的API,帮助开发者轻松实现文件打包、解压与条目管理等核心功能。 ## 🌟 核心功能概览 ZeroTurnaround ZIP Library围绕ZIP文件处理提供三大核心能力: - **文件打包**:

gitblog_00971的博客 1001

为什么选择ZeroTurnaround ZIP Library?5大优势让Java开发者爱不释手

ZeroTurnaround ZIP Library是一款专为Java开发者打造的高效ZIP文件处理工具,提供了简洁易用的API和强大的功能,帮助开发者轻松实现ZIP文件的创建、解压、修改等操作。无论是处理小型压缩包还是大型归档文件,它都能以出色的性能和可靠性满足开发需求。 ## 1. 简洁直观的API设计,降低开发难度 🚀 ZeroTurnaround ZIP Library采用了流畅的A

gitblog_00772的博客 655

开源项目zt-zip简介及新手指南

zt-zip是一个由ZeroTurnaround开发的Java库,专门用于简化ZIP文件的操作。此项目利用`java.util.zip`包进行基于流的访问,同时也提供了对文件系统操作的便利方法。它旨在通过一系列方便的方法来处理大型ZIP归档,无论是解压、打包还是对存档中的条目进行各种操作都变得更加简单易用。zt-zip项目遵循Apache-2.0许可证。 **主要编程语言**: **Java**

gitblog_00998的博客 997

Java压缩解压工具库深度对比与实战:从Commons Compress到Zip4j

文件压缩与解压是数据处理和传输中的基础技术,其核心原理是通过特定算法减少数据体积,以节省存储空间和网络带宽。在Java生态中,这一技术价值体现在高效处理日志归档、应用资源分发和用户文件上传等高频场景。面对ZIP、GZIP、TAR等多种格式以及加密、大文件等复杂需求,开发者需根据具体场景选择合适的工具库。本文聚焦于Apache Commons Compress、Zip4j等主流库的深度对比,通过决策树模型清晰呈现选型逻辑,并针对字符编码、资源管理、ZIP64支持等关键细节提供实战解决方案,帮助开发者规避乱码、

weixin_34413802的博客 307

使用java.util.zip包提供的api完成压缩解压缩工作<转>

原链接:http://bbs.accpbj.com/forum.php?mod=viewthread&amp;tid=2116 java中常用的压缩解压开发包 1.      AT4J是一套数据压缩和文件打包存档的工具,采用java开发 。它支持读取和创建zip和tar文件,以及通过第三方库实现多种类型的压缩算法。其中 bzip2 压缩库采用 Apache Commons Comp...

yingbin920的博客 208

java解压缩

Java实现Zip压缩解压可以使用JDK的原生类java.util.zip,但是JDK 7 之前存在中文文件名乱码问题。使用 ant.jar 的org.apache.tools.zip包,可以避免乱码问题。使用专门的压缩解压第三方组件,如zip4j,zt-zip等,这种实现方式当然更强大,不过一般场景用不到,如果只是压缩解压第2种方式足够了。 然而第三种是最简单的哈哈 下面是zt_zip

UESTCAA的专栏 1389

Android开源项目第二篇——工具库篇

通过这些项目你可以大幅度减少不必要的开发而将精力放在更重要的地方。 一、依赖注入DI 通过依赖注入减少View、服务、资源简化初始化,事件绑定等重复繁琐工作 1. AndroidAnnotations(Code Diet) android快速开发框架 项目地址:https://github.com/excilys/androidannotations 文档介绍:https...

dmyi30166的博客 98

强烈推荐javarebel,太爽了。。。

JavaRebel下载地址为:http://www.zeroturnaround.com/javarebel/ 直接下载zip包,然后在eclipse的JDK的参数中加入 -noverify -javaagent:E:\jrebel-3.6.1\jrebel.jar 我是用tomcat配置文件直接指向项目web目录。 直接部署的同学请看http://wing123.iteye...

dr_showtime的博客 395

Android开源项目发现--- 工具类文件处理篇(持续更新)

1.ZIP java压缩和解压库 项目地址:https://github.com/zeroturnaround/zt-zip 文档介绍:https://github.com/zeroturnaround/zt-zip#examples 作用:(1) 解压和压缩,并支持文件夹内递归操作 (2) 支持包含和排除某些元素 (3) 支持重命名元素 (4) 支持遍历zip包内容 (5) 比较...

weixin_30315723的博客 131
上一篇: 解决安装 VMware Workstation 时提示“已安装”的方法
下一篇: 苹果程序图标中隐藏着的各种秘密
DavidHsing
博客等级 码龄19年 781粉丝 127原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值