2014-09-18 21 views
0

我正在使用ZipArchiveOutputStream將一些數據寫入到zip文件的條目中。 我需要寫入file1,創建另一個file2條目,向該條目添加一些數據,並以某種方式再次寫入我以前寫入的file1。將數據追加到zip文件(ZipArchiveOutputStream)上的條目

我有以下幾點:

File zipFile = new File("zipTest.zip"); 
ZipArchiveOutputStream zipOut; 

try { 
    zipOut = new ZipArchiveOutputStream(zipFile); 
    ArchiveEntry file1 = new ZipArchiveEntry("file1.txt"); 
    ArchiveEntry file2 = new ZipArchiveEntry("file2.txt"); 

    zipOut.putArchiveEntry(file1); 
    zipOut.write("SOME TEXT FILE 1, LINE 1\n".getBytes()); 
    zipOut.closeArchiveEntry(); 

    zipOut.putArchiveEntry(file2); 
    zipOut.write("SOME TEXT FILE 2, LINE1\n".getBytes()); 
    zipOut.closeArchiveEntry(); 

    zipOut.putArchiveEntry(file1); 
    zipOut.write("SOME TEXT FILE 1, LINE 2\n".getBytes()); 
    zipOut.closeArchiveEntry(); 

    zipOut.finish(); 
    zipOut.close(); 
} catch(...) 

然而,只有「一些文本文件1,LINE 1」被寫入到file1條目,我想有2行,當然。

我意識到解決方案會寫一個完整的條目,然後另一個等,但在我的情況下,我想避免這種情況,因爲我需要創建一些大的臨時文件。

回答

1

一旦你關閉了一個條目,你就不能返回並向同一條目添加更多的數據,所以你正在嘗試的是不會工作的。

但是,在同一個zip文件中有兩個同名的條目並不是錯誤。您只能通過名稱訪問中央目錄中的一個條目,但輸出流將允許您將它們兩者都添加,並且從結果文件中讀取ZipArchiveInputStream會給您兩者(輸入流只讀取本地條目標題,而不是中央目錄)。