160压缩封装 - CompressUtil
# 压缩封装 - CompressUtil
# 1. 介绍
CompressUtil
是 Hutool 提供的一个基于 commons-compress
的封装工具,用于处理多种格式的压缩和解压文件操作。虽然 Hutool 已有的 ZipUtil
能处理 ZIP 文件,但对于 7zip、tar 等格式的文件支持不足,因此推出了 CompressUtil
来扩展更多的压缩和解压功能。
此工具支持以下格式:
流式压缩支持:
- GZIP
- BZIP2
- XZ
- PACK200
- SNAPPY_FRAMED
- LZ4_BLOCK
- LZ4_FRAMED
- ZSTANDARD
- DEFLATE
归档文件支持:
- AR
- CPIO
- JAR
- TAR
- ZIP
- 7z
CompressUtil
提供了两个通用接口:
Archiver
:用于归档数据(如打包、增加文件到压缩包等)。Extractor
:用于解包(如解压文件)。
# 2. 使用
# 2.1. 引入 commons-compress
依赖
在使用 CompressUtil
前需要引入 commons-compress
依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.24</version>
</dependency>
1
2
3
4
5
2
3
4
5
# 2.2. 压缩文件
以 7zip 格式为例,我们可以使用 CompressUtil
进行文件压缩:
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.compress.CompressUtil;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import java.io.File;
public class CompressExample {
public static void main(String[] args) {
// 目标压缩文件路径
File file = FileUtil.file("d:/test/compress/test.7z");
// 创建压缩包,指定字符集和压缩格式
CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.SEVEN_Z, file)
.add(FileUtil.file("d:/test/someFiles")) // 添加文件或目录
.finish() // 完成压缩
.close(); // 关闭流
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
代码解析:
ArchiveStreamFactory.SEVEN_Z
指定压缩格式为 7zip,支持自定义其他格式如ZIP
、TAR
等。add(File file)
方法支持添加文件或目录,多个文件或目录可多次调用该方法。finish()
表示完成压缩操作,close()
关闭流,释放资源。
实际开发场景:
- 批量压缩项目中生成的文件,并将其归档保存。
# 2.3. 过滤不需要压缩的文件
有时需要在压缩过程中排除特定文件,可以使用 add
方法的第二个参数 Filter
进行过滤:
CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.SEVEN_Z, file)
.add(FileUtil.file("d:/Java/apache-maven-3.6.3"), (file) -> {
// 过滤掉名称为 "invalid" 的文件
return !"invalid".equals(file.getName());
})
.finish()
.close();
1
2
3
4
5
6
7
2
3
4
5
6
7
代码解析:
- 通过
Filter
接口自定义文件过滤逻辑,如上例中过滤掉名为 "invalid" 的文件。
实际开发场景:
- 需要压缩整个目录但排除部分不必要的文件或子目录时,可以使用该方法。
# 2.4. 解压文件
以 7zip 格式的文件为例,CompressUtil
提供了解压功能:
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.compress.CompressUtil;
import cn.hutool.extra.compress.Extractor;
public class ExtractExample {
public static void main(String[] args) {
// 解压目标文件
Extractor extractor = CompressUtil.createExtractor(
CharsetUtil.defaultCharset(), // 指定字符集
FileUtil.file("d:/test/compress/test.7z") // 待解压文件
);
// 解压到指定目录
extractor.extract(FileUtil.file("d:/test/compress/test2/"));
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
代码解析:
createExtractor
方法用于创建解压器,指定解压文件及字符集。extract
方法指定解压的目标目录,解压后的文件将保存到此目录中。
实际开发场景:
- 解压上传的压缩包文件到指定路径,进行进一步处理。
# 3. 总结
CompressUtil
是 Hutool 针对多种压缩格式的封装工具,提供了便捷的压缩与解压操作。它支持多种压缩格式,无需用户关心底层实现细节,使用简洁易懂。无论是处理流式压缩,还是归档文件操作,开发者都可以通过统一的 API 实现,极大地简化了代码的编写和维护。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08