如何使用XZ for Java添加ZipEntry



我正在使用标准ZipOutputStream 压缩一些json文件

ObjectMapper objectMapper = new ObjectMapper();
try (ZipOutputStream out = new ZipOutputStream(Files.newOutputStream(outputFile + ".zip"))) {
out.putNextEntry(new ZipEntry(jsonFileName + ".json"));
objectMapper.writeValue(out, jsonDataList);
}

输出:

outputFile.zipjsonFileName.json => jsonDataList contents

我想把它从.zip改成.7z或.xz我目前正在为Java开发XZ(https://tukaani.org/xz/java.html)

ObjectMapper objectMapper = new ObjectMapper();
try (XZOutputStream out = new XZOutputStream(Files.newOutputStream(outputFile + ".xz"), new LZMA2Options())) {
objectMapper.writeValue(out, jsonDataList);
out.finish();
}

输出:

outputFile.xzDataTypeOfJsonDataList => jsonDataList contents

它的工作原理是没有错误,创建了一个.xz文件,并且它确实包含一个.json文件(尽管文件名只是"jsonDataList"的数据类型减去".json"扩展名(

如何指定内容的文件名?XZOutputStream似乎没有添加ZipEntry的方法。

xz不是7z7z是一种压缩的归档格式,这意味着它可以包含多个文件以及一个目录结构。xz是一种单文件压缩格式。它可以与未压缩的tar存档格式结合使用,以制作不同的压缩存档格式.tar.xz

感谢蜘蛛鲍里斯和马克·阿德勒让我走上正轨。

我可以使用org.apache.commons.compress.archives.sevenz包将条目添加到7z档案中

SevenZOutputFile sevenZOutput = new SevenZOutputFile(outputFile + ".7z");
SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(jsonFile, jsonFileName + ".json");
sevenZOutput.putArchiveEntry(entry);
sevenZOutput.write(objectMapper.writeValueAsBytes(data));
sevenZOutput.closeArchiveEntry();
sevenZOutput.close();

最新更新