Hutool Hutool
(opens new window)
🏡首页
📖指南
  • 核心(Hutool-core)
  • 配置文件(Hutool-setting)
  • 日志(Hutool-log)
  • 缓存(Hutool-cache)
  • JSON(Hutool-json)
  • 加密解密(Hutool-crypto)
  • DFA查找(Hutool-dfa)
  • 数据库(Hutool-db)
  • HTTP客户端(Hutool-http)
  • 定时任务(Hutool-cron)
  • 扩展(Hutool-extra)
  • 布隆过滤(Hutool-bloomFilter)
  • 切面(Hutool-aop)
  • 脚本(Hutool-script)
  • Office文档操作(Hutool-poi)
  • 系统调用(Hutool-system)
  • 图形验证码(Hutool-captcha)
  • 网络Socket(Hutool-socket)
  • JWT(Hutool-jwt)
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
  • 核心(Hutool-core)
  • 配置文件(Hutool-setting)
  • 日志(Hutool-log)
  • 缓存(Hutool-cache)
  • JSON(Hutool-json)
  • 加密解密(Hutool-crypto)
  • DFA查找(Hutool-dfa)
  • 数据库(Hutool-db)
  • HTTP客户端(Hutool-http)
  • 定时任务(Hutool-cron)
  • 扩展(Hutool-extra)
  • 布隆过滤(Hutool-bloomFilter)
  • 切面(Hutool-aop)
  • 脚本(Hutool-script)
  • Office文档操作(Hutool-poi)
  • 系统调用(Hutool-system)
  • 图形验证码(Hutool-captcha)
  • 网络Socket(Hutool-socket)
  • JWT(Hutool-jwt)
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(Hutool-core)

    • AI(Hutool-ai)

    • 克隆

    • 类型转换

    • 日期时间

    • IO流相关

    • 工具类

      • 概述
      • 字符串工具-StrUtil
      • 16进制工具-HexUtil
      • Escape工具-EscapeUtil
      • Hash算法-HashUtil
      • URL工具-URLUtil
      • XML工具-XmlUtil
      • 对象工具-ObjectUtil
      • 反射工具-ReflectUtil
      • 泛型类型工具-TypeUtil
      • 分页工具-PageUtil
      • 剪贴板工具-ClipboardUtil
      • 类工具-ClassUtil
      • 枚举工具-EnumUtil
      • 命令行工具-RuntimeUtil
      • 数字工具-NumberUtil
      • 数组工具-ArrayUtil
      • 随机工具-RandomUtil
      • 唯一ID工具-IdUtil
      • 压缩工具-ZipUtil
        • 由来
        • 方法
          • Zip
          • Gzip
          • Zlib
          • 常见问题
      • 引用工具-ReferenceUtil
      • 正则工具-ReUtil
      • 身份证工具-IdcardUtil
      • 信息脱敏工具-DesensitizedUtil
      • 社会信用代码工具-CreditCodeUtil
      • SPI加载工具-ServiceLoaderUtil
      • 字符编码工具-CharsetUtil
      • 类加载工具-ClassLoaderUtil
      • 手机号工具-PhoneUtil
    • 语言特性

    • JavaBean

    • 集合类

    • Map

    • Codec编码

    • 文本操作

    • 注解

    • 比较器

    • 异常

    • 数学

    • 线程和并发

    • 图片

    • 网络

    • 源码编译

  • 配置文件(Hutool-setting)

  • 日志(Hutool-log)

  • 缓存(Hutool-cache)

  • JSON(Hutool-json)

  • 加密解密(Hutool-crypto)

  • DFA查找(Hutool-dfa)

  • 数据库(Hutool-db)

  • HTTP客户端(Hutool-http)

  • 定时任务(Hutool-cron)

  • 扩展(Hutool-extra)

  • 布隆过滤(Hutool-bloomFilter)

  • 切面(Hutool-aop)

  • 脚本(Hutool-script)

  • Office文档操作(Hutool-poi)

  • 系统调用(Hutool-system)

  • 图形验证码(Hutool-captcha)

  • 网络Socket(Hutool-socket)

  • JWT(Hutool-jwt)

  • 指南
  • 核心(Hutool-core)
  • 工具类
Hutool
2023-03-28
目录

压缩工具-ZipUtil

特别赞助 by:

# 由来

在Java中,对文件、文件夹打包,压缩是一件比较繁琐的事情,我们常常引入Zip4j (opens new window)进行此类操作。但是很多时候,JDK中的zip包就可满足我们大部分需求。ZipUtil就是针对java.util.zip做工具化封装,使压缩解压操作可以一个方法搞定,并且自动处理文件和目录的问题,不再需要用户判断,压缩后的文件也会自动创建文件,自动创建父目录,大大简化的压缩解压的复杂度。

# 方法

# Zip

  1. 压缩

ZipUtil.zip 方法提供一系列的重载方法,满足不同需求的压缩需求,这包括:

  • 打包到当前目录(可以打包文件,也可以打包文件夹,根据路径自动判断)
//将aaa目录下的所有文件目录打包到d:/aaa.zip
ZipUtil.zip("d:/aaa");
  • 指定打包后保存的目的地,自动判断目标是文件还是文件夹
//将aaa目录下的所有文件目录打包到d:/bbb/目录下的aaa.zip文件中
// 此处第二个参数必须为文件,不能为目录
ZipUtil.zip("d:/aaa", "d:/bbb/aaa.zip");

//将aaa目录下的所有文件目录打包到d:/bbb/目录下的ccc.zip文件中
ZipUtil.zip("d:/aaa", "d:/bbb/ccc.zip");
  • 可选是否包含被打包的目录。比如我们打包一个照片的目录,打开这个压缩包有可能是带目录的,也有可能是打开压缩包直接看到的是文件。zip方法增加一个boolean参数可选这两种模式,以应对众多需求。
//将aaa目录以及其目录下的所有文件目录打包到d:/bbb/目录下的ccc.zip文件中
ZipUtil.zip("d:/aaa", "d:/bbb/ccc.zip", true);
  • 多文件或目录压缩。可以选择多个文件或目录一起打成zip包。
ZipUtil.zip(FileUtil.file("d:/bbb/ccc.zip"), false, 
    FileUtil.file("d:/test1/file1.txt"),
    FileUtil.file("d:/test1/file2.txt"),
    FileUtil.file("d:/test2/file1.txt"),
    FileUtil.file("d:/test2/file2.txt")
);
  1. 解压

ZipUtil.unzip 解压。同样提供几个重载,满足不同需求。

//将test.zip解压到e:\\aaa目录下,返回解压到的目录
File unzip = ZipUtil.unzip("E:\\aaa\\test.zip", "e:\\aaa");

# Gzip

Gzip是网页传输中广泛使用的压缩方式,Hutool同样提供其工具方法简化其过程。

ZipUtil.gzip 压缩,可压缩字符串,也可压缩文件 ZipUtil.unGzip 解压Gzip文件

# Zlib

ZipUtil.zlib 压缩,可压缩字符串,也可压缩文件 ZipUtil.unZlib 解压zlib文件

注意 ZipUtil默认情况下使用系统编码,也就是说:

  1. 如果你在命令行下运行,则调用系统编码(一般Windows下为GBK、Linux下为UTF-8)
  2. 如果你在IDE(如Eclipse)下运行代码,则读取的是当前项目的编码(详细请查阅IDE设置,我的项目默认都是UTF-8编码,因此解压和压缩都是用这个编码)

# 常见问题

  1. 解压时报java.lang.IllegalArgumentException:MALFORMED错误

基本是因为编码问题,Hutool默认使用UTF-8编码,自定义为其他编码即可(一般为GBK)。

//将test.zip解压到e:\\aaa目录下,返回解压到的目录
File unzip = ZipUtil.unzip("E:\\aaa\\test.zip", "e:\\aaa", CharsetUtil.CHARSET_GBK);
  1. 压缩并添加密码

Hutool或JDK的Zip工具并不支持添加密码,可以考虑使用Zip4j (opens new window)完成,以下代码来自Zip4j官网。

ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);
// Below line is optional. AES 256 is used by default. You can override it to use AES 128. AES 192 is supported only for extracting.
zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256); 

List<File> filesToAdd = Arrays.asList(
    new File("somefile"), 
    new File("someotherfile")
);

ZipFile zipFile = new ZipFile("filename.zip", "password".toCharArray());
zipFile.addFiles(filesToAdd, zipParameters);
上次更新: 2025/05/21, 11:39:56
唯一ID工具-IdUtil
引用工具-ReferenceUtil

← 唯一ID工具-IdUtil 引用工具-ReferenceUtil→

Theme by Vdoing | Copyright © 2023-2025 Hutool | MulanPSL-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×