以前我们在我们的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