エントリセット全体を反復処理することなく、特定のファイルをZipFile
/から直接読み取る方法があるかどうかを知りたいです。ZipInputStream
アーカイブに多数のファイルが含まれている場合、これはかなりのオーバーヘッドになる可能性があると思います。より良い方法はありますか?
私はこれを行うことができることを知ってTrueZip
おり、少し前にそれを行いましたが、1.8 SDK に最近より適切なものが含まれているかどうか疑問に思っています...?
エントリセット全体を反復処理することなく、特定のファイルをZipFile
/から直接読み取る方法があるかどうかを知りたいです。ZipInputStream
アーカイブに多数のファイルが含まれている場合、これはかなりのオーバーヘッドになる可能性があると思います。より良い方法はありますか?
私はこれを行うことができることを知ってTrueZip
おり、少し前にそれを行いましたが、1.8 SDK に最近より適切なものが含まれているかどうか疑問に思っています...?
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 インスタンスを必ず閉じてください。
ZipFile
getEntry(String)
これを行う方法があります。ただし、コードがエントリを反復しないことを意味する場合は、いいえ、それを行うことはできません。zip ファイル内のエントリは順序付けされていないため、取得できる最良の方法は O(n) 反復検索です。