压缩封装-CompressUtil
# 介绍
虽然Hutool基于JDK提供了ZipUtil
用于压缩或解压ZIP相关文件,但是对于7zip、tar等格式的压缩依旧无法处理,于是基于commons-compress
做了进一步封装:CompressUtil
。
此工具支持的格式有:
对于流式压缩支持:
- GZIP
- BZIP2
- XZ
- XZ
- PACK200
- SNAPPY_FRAMED
- LZ4_BLOCK
- LZ4_FRAMED
- ZSTANDARD
- DEFLATE
对于归档文件支持:
- AR
- CPIO
- JAR
- TAR
- ZIP
- 7z
对于归档文件,Hutool提供了两个通用接口:
- Archiver 数据归档,提供打包工作,如增加文件到压缩包等
- Extractor 归档数据解包,用于解压或者提取压缩文件
# 使用
首先引入commons-compress
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.21</version>
</dependency>
# 压缩文件
我们以7Zip为例:
final 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();
其中ArchiveStreamFactory.SEVEN_Z
就是自定义的压缩格式,可以自行选择
add方法同时支持文件或目录,多个文件目录多次调用add方法即可。
有时候我们不想把目录下所有的文件放到压缩包,这时候可以使用add方法的第二个参数Filter
,此接口用于过滤不需要加入的文件。
CompressUtil.createArchiver(CharsetUtil.CHARSET_UTF_8, ArchiveStreamFactory.SEVEN_Z, zipFile)
.add(FileUtil.file("d:/Java/apache-maven-3.6.3"), (file)->{
if("invalid".equals(file.getName())){
return false;
}
return true;
})
.finish().close();
# 解压文件
我们以7Zip为例:
Extractor extractor = CompressUtil.createExtractor(
CharsetUtil.defaultCharset(),
FileUtil.file("d:/test/compress/test.7z"));
extractor.extract(FileUtil.file("d:/test/compress/test2/"));
上次更新: 2023/05/08, 01:55:50