Java 压缩与解压缩操作详解:ZIP 与 GZIP 实践
在 Java 中,处理压缩文件是常见需求,尤其是在文件传输、存储优化等场景。JDK 内置了对 ZIP 和 GZIP 格式的支持,通过 java.util.zip 包中的类可实现压缩和解压缩操作。本文将详细介绍 ZIP 和 GZIP 的使用方法,包括单文件 / 多文件压缩、文件夹递归压缩及解压缩的具体实现。
ZIP 压缩与解压缩
ZIP 是一种广泛使用的归档格式,支持将多个文件或文件夹压缩到一个 .zip 文件中,且可保留目录结构。Java 中通过 ZipInputStream(解压缩)和 ZipOutputStream(压缩)实现 ZIP 操作。
ZIP 解压缩(ZipInputStream)
ZipInputStream 用于读取 ZIP 文件中的条目(文件或文件夹),通过 getNextEntry() 遍历所有条目,再通过输入流读取具体内容。
核心步骤:
- 创建
ZipInputStream关联 ZIP 文件输入流。 - 循环调用
getNextEntry()获取每个ZipEntry(条目)。 - 对每个条目,通过
ZipInputStream读取数据(若为文件夹则跳过内容读取)。 - 处理完成后调用
closeEntry()关闭当前条目,最终关闭流。
示例:解压缩 ZIP 文件到指定目录
1 | import java.io.*; |
注意事项:
- 中文乱码:
ZipInputStream构造器需指定编码(如StandardCharsets.UTF_8),避免条目名称中文乱码。 - 目录处理:通过
entry.isDirectory()判断是否为文件夹,需创建对应目录结构。
