【发布时间】:2021-09-01 11:40:29
【问题描述】:
我正在尝试压缩一组文件并将其存储到内存中。 下面是我正在使用的代码
try (ByteArrayOutputStream zipBaos = new ByteArrayOutputStream();
ZipOutputStream zs = new ZipOutputStream(zipBaos)) {
Path pp = Paths.get(sourceDirPath);
Files.walk(pp)
.filter(path -> !Files.isDirectory(path) && pp.relativize(path).toString().contains(instituteId)
&& pp.relativize(path).toString().contains("dumps-" + hostCount))
.forEach(LambdaExceptionUtil.rethrowConsumer(path -> {
ZipEntry zipEntry = new ZipEntry(pp.relativize(path).toString());
try {
downloadedfilename.add(zipEntry.getName().substring(
zipEntry.getName().lastIndexOf(File.separator) + 1, zipEntry.getName().length()));
zs.putNextEntry(zipEntry);
Files.copy(path, zs);
zs.closeEntry();
} catch (IOException e) {
LOGGER.error("Exception in Zipping downloaded files {}", e);
throw e;
}
}));
return zipBaos.toByteArray();
}
}
现在稍后当我尝试将此字节数组内容以 zip 文件的形式再次存储在文件系统中时
FileUtils.writeByteArrayToFile(new File(location + File.separator + name), content);
正在创建 Zip 文件,并且它也显示了适当的大小。
但是当我试图打开文件窗口时抱怨它是无效的。
注意:我可以用 7Zip 打开它,但不能用 Windows 资源管理器打开。
谢谢。
【问题讨论】: