Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

      • 简介
        • 📚简介
        • 🏗️核心结构
          • 1. 模块划分
          • 2. JDK java.util.zip 简介
        • 🎯 工具化封装的意义
        • 🔧 如何简化操作
          • 1. 传统JDK方式(复杂)
          • 2. Hutool方式(简洁)
          • 3. 更多简化示例
          • 解压ZIP文件
          • 创建GZIP文件
          • 读取ZIP文件内容
        • 🚀 快速开始
          • 1. ZIP压缩示例
          • 2. ZIP解压示例
          • 3. GZIP压缩解压示例
        • 🎯 设计优势
        • 📌 注意事项
      • ZIP工具-ZipUtil
      • GZIP工具-Gzip
      • DEFLATE工具-Deflate
      • ZIP读取器-ZipReader
      • ZIP写入器-ZipWriter
      • ZIP替换工具-ZipReplacer
      • ZIP资源-ZipResource
      • ZIP64支持-Zip64
    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 压缩(compress)
Hutool
2026-01-03
目录

简介

# 📚简介

Hutool的压缩模块提供了丰富的压缩和解压缩功能,是对JDK java.util.zip 包的工具化封装,旨在简化压缩操作,提高开发效率。该模块支持多种压缩格式,包括ZIP、GZIP、DEFLATE等,提供了便捷的API,让开发者可以用更少的代码完成复杂的压缩任务。

# 🏗️核心结构

# 1. 模块划分

类型 名称 主要职责
工具类 ZipUtil ZIP压缩和解压缩的核心工具类
流处理 Gzip GZIP压缩和解压缩工具
流处理 Deflate DEFLATE压缩和解压缩工具
流处理 InflaterInputStream 增强的Inflater输入流
ZIP操作 ZipReader ZIP文件读取器
ZIP操作 ZipWriter ZIP文件写入器
ZIP操作 ZipReplacer ZIP文件内容替换工具
ZIP资源 ZipResource ZIP资源抽象
ZIP资源 ZipFileResource 文件型ZIP资源
ZIP资源 ZipStreamResource 流型ZIP资源
ZIP扩展 Zip64 ZIP64支持工具
ZIP扩展 OpcZipOutputStream OPC格式ZIP输出流
ZIP扩展 ZipCopyVisitor ZIP复制访问器
安全工具 ZipSecurityUtil ZIP安全工具

# 2. JDK java.util.zip 简介

JDK的 java.util.zip 包提供了基本的压缩和解压缩功能,包括:

  • 核心类:ZipInputStream、ZipOutputStream、GZIPInputStream、GZIPOutputStream、Deflater、Inflater 等
  • 功能:支持ZIP、GZIP、DEFLATE等压缩格式
  • 特点:提供了底层的流处理API,功能强大但使用复杂
  • 不足:
    • API设计较为底层,需要开发者处理大量流操作细节
    • 异常处理繁琐,容易出现资源泄漏
    • 代码冗长,开发效率低
    • 缺乏高级功能支持,如ZIP64、文件替换等

# 🎯 工具化封装的意义

Hutool对 java.util.zip 进行工具化封装的主要意义在于:

  1. 简化API:提供简洁易用的API,减少样板代码
  2. 资源管理:自动处理流的打开和关闭,避免资源泄漏
  3. 异常处理:统一处理异常,简化错误处理逻辑
  4. 功能增强:扩展了JDK的压缩功能,如ZIP64支持、文件替换等
  5. 提高效率:减少开发者的学习成本和开发时间
  6. 统一接口:为不同的压缩格式提供统一的操作接口

# 🔧 如何简化操作

# 1. 传统JDK方式(复杂)

// 创建ZIP文件
String zipFilePath = "test.zip";
String sourceDirPath = "source";

try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
    File sourceDir = new File(sourceDirPath);
    File[] files = sourceDir.listFiles();

    for (File file : files) {
        if (file.isFile()) {
            ZipEntry zipEntry = new ZipEntry(file.getName());
            zos.putNextEntry(zipEntry);

            try (FileInputStream fis = new FileInputStream(file)) {
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, len);
                }
            }

            zos.closeEntry();
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

# 2. Hutool方式(简洁)

// 创建ZIP文件
String zipFilePath = "test.zip";
String sourceDirPath = "source";

// 一行代码完成ZIP压缩
ZipUtil.zip(sourceDirPath, zipFilePath);

# 3. 更多简化示例

# 解压ZIP文件

// 传统方式:需要处理流、异常等
// Hutool方式:一行代码
ZipUtil.unzip("test.zip", "output");

# 创建GZIP文件

// 传统方式:需要处理GZIPOutputStream、FileOutputStream等
// Hutool方式:一行代码
Gzip.zip("source.txt", "source.txt.gz");

# 读取ZIP文件内容

// 传统方式:需要遍历ZipEntry,处理流等
// Hutool方式:简洁API
try (ZipReader reader = ZipUtil.reader("test.zip")) {
    // 读取所有条目
    List<ZipEntry> entries = reader.getEntries();
    // 读取指定文件内容
    String content = reader.readStr("test.txt");
}

# 🚀 快速开始

# 1. ZIP压缩示例

// 压缩单个文件
ZipUtil.zip("source.txt", "source.zip");

// 压缩多个文件
ZipUtil.zip("output.zip", false, "file1.txt", "file2.txt");

// 压缩目录
ZipUtil.zip("sourceDir", "sourceDir.zip");

// 压缩目录并排除指定文件
ZipUtil.zip("sourceDir", "sourceDir.zip", path -> !path.endsWith(".tmp"));

# 2. ZIP解压示例

// 解压到指定目录
ZipUtil.unzip("source.zip", "outputDir");

// 解压到当前目录
ZipUtil.unzip("source.zip");

// 解压指定文件
ZipUtil.unzipFile("source.zip", "outputDir", "file.txt");

# 3. GZIP压缩解压示例

// GZIP压缩
Gzip.zip("source.txt", "source.txt.gz");

// GZIP解压
Gzip.unzip("source.txt.gz", "source.txt");

# 🎯 设计优势

  1. 简洁易用:提供了简洁的API,一行代码即可完成复杂的压缩解压操作
  2. 功能全面:支持多种压缩格式,包括ZIP、GZIP、DEFLATE等
  3. 资源安全:自动处理流的打开和关闭,避免资源泄漏
  4. 异常友好:统一处理异常,简化错误处理逻辑
  5. 扩展丰富:提供了ZIP64支持、文件替换等高级功能
  6. 性能优异:底层实现经过优化,性能优异
  7. 线程安全:所有工具类都是线程安全的,可以在多线程环境下安全使用

# 📌 注意事项

  1. 文件大小:对于超大文件,建议使用流处理方式,避免内存溢出
  2. 编码问题:ZIP文件名默认使用UTF-8编码,如需其他编码请指定
  3. 性能考虑:压缩操作可能会消耗较多CPU和内存资源,建议在后台线程中执行
  4. 版本兼容性:不同版本的JDK对压缩算法的实现可能有所不同,注意版本兼容性
  5. 安全问题:处理不可信的ZIP文件时,注意防范ZIP炸弹等安全风险
比较器实现
ZIP工具-ZipUtil

← 比较器实现 ZIP工具-ZipUtil→

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