我想知道是否有办法直接从ZipFile
/ ZipInputStream
读取特定文件,而无需迭代整个条目集。如果存档包含大量文件,我想这可能是一个很大的开销。还有更好的方法吗?
我知道可以使用TrueZip
完成此操作并且我之前已经完成了,但我想知道1.8 SDK是否包含现在更适合的内容......?
答案 0 :(得分:3)
在java 7中,您可以对待zip files as a Filesystem。
虽然这确实提供了一些方便的访问方法,但它不可能执行任何不同的迭代而不是在条目列表上查找单个文件。
获取特定路径的输入流:
Path zipfile = Paths.get("/codeSamples/zipfs/zipfstest.zip");
FileSystem fs = FileSystems.newFileSystem(zipfile, null);
Path entry = fs.getPath("/my/entry.txt");
InputStream is = Files.newInputStream(entry);
完成后,还要确保close FileSystem实例。
答案 1 :(得分:0)
ZipFile
使用getEntry(String)
方法执行此操作。如果你的意思是代码永远不会遍历条目,那么,不,你不能这样做。 zip文件中的条目是无序的,因此最好的是O(n)迭代搜索。