之前我们的 Web 应用程序中有一些 zip 文件。我们想要解析 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
现在失败了。我可以得到一个InputStream
对于 zip:但我无法获取条目本身的输入流。
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();
}
但我无法获取条目本身的输入流。我尝试查找条目的长度并从中获取接下来的 n 个字节ZipInputStream
但这对我不起作用。看起来读取的所有字节都是0。
有没有办法解决这个问题,或者我是否必须将 zip 文件移回到核心项目中?
TrueZip 怎么样?使用它,您可以简单地打开压缩文件,就好像它位于目录中一样。
new FileOutputStream("/path/to/some-jar.jar/internal/zip/file.zip/myfile.txt");
根据文档,还支持无限嵌套。我还没有实际使用这个项目,但它已经出现在我的雷达上一段时间了,它似乎适用于你的问题。
项目地点:http://truezip.java.net/ http://truezip.java.net/(已编辑)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)