java.util.zip:putNextEntry

Atm*_*ons 3 java zip

我正在尝试使用java.util.net修改zip文件中的文件.因为不可能直接修改文件而我只想修改一个文件,所以我只创建一个新的zip文件,其中基本上包含了模板并替换特定文件,至少是计划.

以下是我尝试的最重要的部分:

Enumeration<? extends ZipEntry> entries = zif.entries();
while (entries.hasMoreElements()) {
ZipEntry currentEntry = entries.nextElement();
if (!currentEntry.isDirectory() && currentEntry.getSize() >0 && currentEntry.getCompressedSize() > 0)
{
    System.out.println(currentEntry.getName() + ": " + currentEntry.getSize() + "-" + currentEntry.getMethod());
    if (currentEntry.getName() != "file_i_want_to_change")
    {
        try {
            this.zos.putNextEntry(currentEntry);  // HERE the exception is thrown
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

信息:zif = ZipFile,正确实例化并从现有文件打开; zos = ZipOutputStream,正确地为新文件实例化.

这是抛出的异常:

java.util.zip.ZipException: invalid entry size (expected 39 but got 0 bytes)
at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:228)
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:144)
at TestClass.replace(TestClass.java:117)
at TestClass.main(TestClass.java:10)
Run Code Online (Sandbox Code Playgroud)

而TestClass:117是注释的行,那就是它失败的地方.

有趣的是,这段代码中的System.out.println工作正常,没有任何文件报告为0大小.

有人看到我可能犯的错误吗?

任何想法都表示赞赏.

在此先感谢您的问候

obj*_*cts 7

只是将ZipEntry写入流是不够的,您仍然需要编写内容.

        this.zos.putNextEntry(new ZipEntry(currentEntry));
        int len;
        while ((len = zis.read(buf)) >= 0)
        {
           zos.write(buf, 0, len);
        }
Run Code Online (Sandbox Code Playgroud)

完整的例子在这里