我有下面的代碼,在一個zip寫入一個文本文件:的java:變化的ZipEntry名
FileOutputStream fOut = new FileOutputStream(fullFilename, false);
BufferedOutputStream bOut = new BufferedOutputStream(fOut);
ZipOutputStream zOut = new ZipOutputStream(bOut);
zOut.putNextEntry(new ZipEntry("aFile1.txt"));
//Do some processing and write to zOut...
zOut.write(...);
(...)
zOut.closeEntry();
zOut.close();
//Etc (close all resources)
我需要去改變它已被寫入後的ZipEntry的文件名(如它的名字將取決於在其內容寫)。
此外,只有在知道最終文件名時(因爲文件大小可能非常大:沒有足夠的內存),它不是寫入緩衝區並寫入文件的選項。
任何意見如何做到這一點將不勝感激!
感謝, 托馬斯
這並不簡單,因爲條目名稱是本地文件頭的一部分,必須在壓縮數據之前將其寫入輸出流。我想如果你有一個可尋址的流作爲底層的目的地,你可以想象回去修改標題來改變它的名字,但只有當新名字的字節數與舊字節的字節數完全相同時...... –
@IanRoberts您將它帶到了一個地步:在Java的FileOutputStream中缺少一個隨機訪問查找並且指示文件位置丟失。但是zip格式很簡單,可以使用RandomAccessFile製作一個可修改的zip條目列表。 –