[英]java.util.zip: putNextEntry
我正在嘗試使用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, 0, len);
}
完整的例子在這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.