2

エントリセット全体を反復処理することなく、特定のファイルをZipFile/から直接読み取る方法があるかどうかを知りたいです。ZipInputStreamアーカイブに多数のファイルが含まれている場合、これはかなりのオーバーヘッドになる可能性があると思います。より良い方法はありますか?

私はこれを行うことができることを知ってTrueZipおり、少し前にそれを行いましたが、1.8 SDK に最近より適切なものが含まれているかどうか疑問に思っています...?

4

2 に答える 2

3

Java 7 では、zip ファイルを 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);

また、作業が完了したら、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...-

于 2015-04-17T02:43:21.537 に答える
0

ZipFilegetEntry(String)これを行う方法があります。ただし、コードがエントリを反復しないことを意味する場合は、いいえ、それを行うことはできません。zip ファイル内のエントリは順序付けされていないため、取得できる最良の方法は O(n) 反復検索です。

Javadoc リンク

于 2015-04-17T02:39:17.287 に答える