Common 常用模块

Date 日期处理

Reflection 反射

Input/Output 输入/输出

HTTP 请求

加密/解密

其他

UnzipHelper

UnzipHelper 专门负责安全解压 ZIP,包含 Zip Slip、符号链接、条目数量、解压大小和压缩比保护;它与 ZipHelper 的压缩职责分离。

import com.ajaxjs.util.io.UnzipHelper;

new UnzipHelper("C:/downloads/archive.zip").extract();

未指定目标目录时,archive.zip 默认解压到同级的 archive 目录。也可指定目标目录:

new UnzipHelper("C:/downloads/archive.zip", "C:/work/extracted").extract();

限制与旧编码文件名

默认限制为 10,000 个条目、单条目 1 GB、总量 10 GB、最大压缩比 100:1。可信压缩包可按实际需要配置限制:

UnzipHelper.ExtractionLimits limits =
        new UnzipHelper.ExtractionLimits(2_000, 100L * 1024 * 1024, 500L * 1024 * 1024, 50.0);
new UnzipHelper("archive.zip", "output", limits).extract();

ZIP 文件名默认按 UTF-8 读取。对于使用 GBK 的旧 ZIP,在解压前设置字符集:

UnzipHelper helper = new UnzipHelper("legacy.zip");
helper.setCharset(java.nio.charset.Charset.forName("GBK"));
helper.extract();

单个条目会先写入临时文件,成功后再移动到目标位置。若压缩包在后续条目失败,之前已完成的条目仍会保留;需要全有或全无语义时,应先解压到新的临时目录。