java.util.zip:putNextEntry
发布时间:2020-12-15 08:33:06 所属栏目:Java 来源:网络整理
导读:我正在尝试使用 java.util.net修改zip文件中的文件 由于无法直接修改文件而且我只想修改一个文件,我只创建一个新的zip文件,基本上包含模板的内容并替换特定的文件,至少是计划. 以下是我尝试的最重要的部分: Enumeration? extends ZipEntry entries = zif.en
我正在尝试使用
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()); } } } 信息: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) 而TestClass:117是注释的行,那就是它失败的地方. 有趣的是,这段代码中的System.out.println工作正常,没有任何文件报告为0大小. 有人看到我可能犯的错误吗? 任何想法都表示赞赏. 在此先感谢您的问候 解决方法
只是将ZipEntry写入流是不够的,您仍然需要编写内容.
this.zos.putNextEntry(new ZipEntry(currentEntry)); int len; while ((len = zis.read(buf)) >= 0) { zos.write(buf,len); } 完整示例here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容