压缩工具类 - ZipUtil
# 压缩工具类 - ZipUtil
简介
ZipUtil
是 Hutool 提供的一个针对 java.util.zip
进行工具化封装的类,简化了文件和文件夹的压缩和解压操作。它自动处理文件和目录的判断问题,提供了一系列的方法来满足不同的压缩和解压需求,使得压缩解压变得更加简单、便捷。
# 1. Zip
- 压缩
ZipUtil.zip
方法提供了多种重载方式来满足不同的压缩需求,包括压缩单个文件或文件夹、压缩多个文件或文件夹等。
# 1.1 压缩目录到当前目录
import cn.hutool.core.util.ZipUtil;
public class ZipUtilExample {
public static void main(String[] args) {
// 将 "d:/aaa" 目录下的所有文件和目录打包压缩到 "d:/aaa.zip"
ZipUtil.zip("d:/aaa");
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
zip(String srcPath)
:将指定路径下的文件或目录打包为 ZIP 文件,保存在当前目录中。srcPath
:源文件或目录的路径。
# 1.2 指定压缩文件保存路径
import cn.hutool.core.util.ZipUtil;
public class ZipUtilExample {
public static void main(String[] args) {
// 将 "d:/aaa" 目录下的所有文件和目录打包压缩到 "d:/bbb/aaa.zip"
ZipUtil.zip("d:/aaa", "d:/bbb/aaa.zip");
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
zip(String srcPath, String destPath)
:将指定路径下的文件或目录打包为 ZIP 文件,保存在指定的目标路径。srcPath
:源文件或目录的路径。destPath
:压缩后的 ZIP 文件保存路径。
# 1.3 压缩时包含源目录
import cn.hutool.core.util.ZipUtil;
public class ZipUtilExample {
public static void main(String[] args) {
// 将 "d:/aaa" 目录以及其下的所有文件打包压缩到 "d:/bbb/ccc.zip"
ZipUtil.zip("d:/aaa", "d:/bbb/ccc.zip", true);
}
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
zip(String srcPath, String destPath, boolean withSrcDir)
:将指定路径下的文件或目录打包为 ZIP 文件,并决定是否包含源目录。withSrcDir
:是否包含源目录。
# 1.4 压缩多个文件或目录
import cn.hutool.core.util.ZipUtil;
import cn.hutool.core.io.FileUtil;
public class ZipUtilExample {
public static void main(String[] args) {
// 将多个文件和目录打包压缩到 "d:/bbb/ccc.zip"
ZipUtil.zip(FileUtil.file("d:/bbb/ccc.zip"), false,
FileUtil.file("d:/test1/file1.txt"),
FileUtil.file("d:/test1/file2.txt"),
FileUtil.file("d:/test2/file1.txt"),
FileUtil.file("d:/test2/file2.txt")
);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
zip(File zipFile, boolean withSrcDir, File... srcFiles)
:将多个文件或目录打包为 ZIP 文件。zipFile
:目标 ZIP 文件。withSrcDir
:是否包含源目录。srcFiles
:要压缩的文件或目录。
# 2. Unzip
- 解压
ZipUtil.unzip
提供了解压 ZIP 文件的方法,支持解压到指定目录。
# 2.1 解压 ZIP 文件
import cn.hutool.core.util.ZipUtil;
import java.io.File;
public class ZipUtilExample {
public static void main(String[] args) {
// 将 "E:/aaa/test.zip" 解压到 "e:/aaa" 目录下
File unzipDir = ZipUtil.unzip("E:/aaa/test.zip", "e:/aaa");
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
unzip(String zipFilePath, String outFileDir)
:解压指定的 ZIP 文件到目标目录。zipFilePath
:ZIP 文件路径。outFileDir
:解压后的目标目录。
# 3. Gzip
和 Zlib
ZipUtil
还提供了 Gzip 和 Zlib 的压缩和解压方法,用于对字符串或文件进行压缩。
# 2.2 Gzip 压缩和解压
import cn.hutool.core.util.ZipUtil;
public class ZipUtilExample {
public static void main(String[] args) {
// Gzip 压缩字符串
byte[] compressed = ZipUtil.gzip("Hello, Hutool!");
// Gzip 解压
String decompressed = ZipUtil.unGzip(compressed);
System.out.println("解压后的字符串: " + decompressed); // 结果:Hello, Hutool!
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
gzip(String content)
:将字符串使用 Gzip 压缩,返回字节数组。unGzip(byte[] compressed)
:将 Gzip 压缩的字节数组解压,返回字符串。
# 4. 常见问题和注意事项
# 编码问题导致的解压错误
解压时如果遇到 java.lang.IllegalArgumentException: MALFORMED
错误,通常是由于编码问题导致的。可以通过指定编码来解决。
import cn.hutool.core.util.ZipUtil;
import cn.hutool.core.util.CharsetUtil;
import java.io.File;
public class ZipUtilExample {
public static void main(String[] args) {
// 使用 GBK 编码解压
File unzipDir = ZipUtil.unzip("E:/aaa/test.zip", "e:/aaa", CharsetUtil.CHARSET_GBK);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
通过 ZipUtil
,开发者可以轻松处理文件和目录的压缩与解压操作,无需关心文件和目录的区分,大大简化了操作过程。无论是对单个文件、多个文件还是目录的压缩和解压,ZipUtil
都提供了完善的支持,使文件处理更加高效和简便。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08