使用 zip4j 处理压缩文件
使用 zip4j 处理压缩文件
通常情况下使用 java 处理 zip 文件时,有 java.util.zip 包下类可以使用。 但这些包过于基础且难于使用。 zip4j 有简单易用的 api,几乎可以完美使用于各种 ZIP 相关操作的场景中。
常用的 zip 处理场景包括:
压缩:
- 将文件打包存储到 zip 文件
- 将文件打包到 zip 文件内的特定文件夹内
解压:
- 将指定 zip 内所有文件解压到指定的文件夹内
- 解压 zip 文件内指定的文件夹或文件到指定的文件夹内
zip4j 压缩指定文件到 zip 文件
ZipFile zipFile = new ZipFile("/temp/test.zip");
zipFile.getFile().getParentFile().mkdirs();
if (zipFile.getFile().exists()) {
// 文件已经存在,则删除该zip文件,重新生成
zipFile.getFile().delete();
}
ZipParameters parameters = new ZipParameters();
// 压缩方式
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
// 压缩级别
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
zipFile.createZipFile(file, parameters);
// 要压缩的文件
File file = new File("/temp/store/photos/test.png");
// 设置文件压缩到zip的test2文件夹内
parameters.setRootFolderInZip("test2/");
// 将文件添加到zip内
zipFile.addFile(f, parameters);
将内存内容作为文件加入 zip 压缩包
// 定义辅助函数
private void addStream(ZipFile zipFile, byte[] bytes,String fileName){
ZipParameters parameters = new ZipParameters();
parameters.setFileNameInZip(fileName);
try (InputStream inputStream = new ByteArrayInputStream(bytes)){
zipFile.addStream(inputStream,parameters);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void addZip(){
String file="/tmp/test.zip";
try (ZipFile zipFile = new ZipFile(file)) {
zipFile.setCharset(Charset.forName("utf-8"));
// 将内存字符串当作 content.txt 加入压缩文件
addStream(zipFile,"测试字符串".getBytes(StandardCharsets.UTF_8),"content.txt");
} catch (Exception e) {
log.error("写入压缩文件出错", e);
return 1;
}
}