我想知道是否有一种方法可以直接从ZipFile / ZipInputStream读取特定文件,而不必遍历整个条目集。我想如果归档文件包含大量文件,这可能是相当大的开销。有没有更好的办法?

我知道这可以通过TrueZip来完成,而我已经做了一段时间,但是我想知道1.8 SDK现在是否包含更合适的东西?

最佳答案

在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实例。

http://docs.oracle.com/javase/8/docs/api/java/nio/file/FileSystem.html#getPath-java.lang.String-java.lang.String...-

http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newInputStream-java.nio.file.Path-java.nio.file.OpenOption...-

关于java - 有没有一种方法可以从ZipInputStream读取特定文件,而不必遍历整个条目集?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29688585/

10-11 21:59
查看更多