将zipped byte []写入文件

时间:2015-05-06 14:45:29

标签: java nio bytearrayoutputstream zipoutputstream

我正在尝试将zipfile写入内存中的byte[],然后将其写入磁盘。生成的zip文件已损坏。

这有效:

try (FileOutputStream fos = new FileOutputStream(Files.createTempFile("works", ".zip").toFile());
     ZipOutputStream zos = new ZipOutputStream(fos)) {
    zos.putNextEntry(new ZipEntry("test.txt"));
    zos.write("hello world".getBytes());
    zos.closeEntry();
}

这已损坏并创建一个损坏的zip文件:

try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
     ZipOutputStream zos = new ZipOutputStream(bos)) {
    zos.putNextEntry(new ZipEntry("test.txt"));
    zos.write("hello world".getBytes());
    zos.closeEntry();

    Files.write(Files.createTempFile("broken", ".zip"), bos.toByteArray());
}

为什么第二个不起作用?我怎么能修复它,假设我需要对原始byte[]进行操作(我不能将zip文件直接创建到文件中,因为我需要byte[]用于其他目的)

1 个答案:

答案 0 :(得分:2)

您可能希望在编写zos之前刷新bos,因为在尝试使用资源之后它才会关闭(因此zos不一定会被刷新到bos当你把字节写入文件时。

编辑:你需要调用zos.finish();来完成压缩。 close()方法会正常调用它。