1

現在、 ZipInputStreamインスタンスを使用して zip ファイルを電話のターゲットの場所に解凍する次のコードがあります。

ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(sourceZipFile));
ZipEntry zipEntry = null;

while ((zipEntry = zipInputStream.getNextEntry()) != null) {
  File zipEntryFile = new File(targetFolder, zipEntry.getName());
  // write contents of 'zipEntry' to 'zipEntryFile'
}

解凍が進行するにつれて進行状況インジケーターを表示できるように、開始前に解凍されるファイルまたはバイトの総数 (の推定値) を取得することが (上記のセットアップまたはその他の方法を使用して) 可能かどうかを誰かが知っていますか? ZipInputStreamにはまたは同様のメソッドがあるのではないかと思いgetTotalEntries()ましたが、このようなものは見つかりません。

4

3 に答える 3

3

メソッドを使用しZipEntry#getSize()ます。非圧縮ファイルのサイズを返します。

ZIP ファイル内に複数のエントリ (ファイル) がある場合は、まずそれらを (抽出せずに) 反復処理し、すべてのファイル サイズを合計します。これはかなり良い見積もりかもしれません。

これらのファイルがディスク上で占有する正確なバイト数を知る必要がある場合はcluster、ファイルシステム内の正確なサイズも知る必要があることに注意してください。

于 2012-06-06T17:44:46.560 に答える
1

npe が述べたように、ZipEntry は zip ファイル内からファイルの圧縮されていないサイズを取得します。

あなたがする必要があるのは、を使用して1つのパスを実行することだと思います

getNextEntry

完了するまで、途中でエントリをカウントし(エントリのサイズと量)、その後実際の解凍を再開します

于 2012-06-06T17:48:23.550 に答える