2014-09-18 1471 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会给您两者(输入流只读取本地条目标题,而不是中央目录)。