簡體   English   中英

java.util.zip:putNextEntry

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM