以前我們在我們的web應用程序中有一些zip文件。我們想要壓縮zip文件中的特定文本文檔。這不是一個問題:閱讀jar文件中的zip文件
URL url = getClass().getResource(zipfile);
ZipFile zip = new ZipFile(url.getFile().replaceAll("%20", " "));
Entry entry = zip.getEntry("file.txt");
InputStream is = zip.getInputStream(entry);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
while (line != null) {
// do stuff
}
但是,我們已經將這些zip文件移動到另一個模塊中,並希望將它們打包到jar中。不幸的是,創建ZipFile
現在失敗了。我可以獲得zip的InputStream
:但我無法爲條目本身獲取輸入流。
InputStream is = getClass().getResourceAsStream(zipfile);
ZipInputStream zis = new ZipInputStream(is);
ZipEntry entry = zis.getNextEntry();
while (entry != null && !entry.getName().equals("file.txt")) {
entry = zis.getNextEntry();
}
但我沒有辦法獲得條目本身的輸入流。我試圖找到入口的長度,並從ZipInputStream
獲得下一個n字節,但這對我並不適用。似乎所有讀取的字節都是0.
有沒有辦法解決這個問題或者我將不得不將zip文件移回核心項目?
事實上,你可以使用Class.getResourceAsStream和ZipInputStream閱讀外-zip。這樣,您就不需要特別的文件名替換,也不需要依賴URL來訪問文件。 – helios 2010-09-14 16:30:58