我想知道是否有一种方法可以直接从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/