自分で再帰的に実行せずに、TrueZip を使用してフォルダーのサイズを取得する方法はありますか? 大量のファイルを含むアーカイブを扱っているため、ランタイムが心配です。
TrueZip 7.7.9 の使用
OK、これは標準の Java 7 API のみを使用した簡単なテストです。バンドルされている zip 用の JSR 203 実装を使用します。
public final class Test
{
public static void main(final String... args)
throws IOException
{
final Path zip = Paths.get("/home/fge/t.zip");
final URI uri = URI.create("jar:" + zip.toUri());
try (
final FileSystem fs = FileSystems.newFileSystem(uri, Collections.emptyMap());
final DirectoryStream<Path> stream = Files.newDirectoryStream(fs.getPath("/"));
) {
for (final Path entry: stream)
System.out.println(Files.size(entry));
}
}
}
上記の zip には、ディレクトリではなく、最上位レベルのファイルのみが含まれています。
これは、この API を使用して、zip 内のファイルのサイズを正しく計算できることを意味します。解凍する必要はありません。
Java 7 を使用しています。したがって、おそらくやりたいことはFileVisitor
、すべての通常ファイルのサイズを計算する を使用することです。
Files.size()
ここでは、 ;を使用する大雑把なハックを作成しました。ではFileVisitor
、ディレクトリではないファイルシステム エントリにアクセスするとBasicFileAttributes
、size()
.
ここにJavadoc ; と使用しますFiles.walkFileTree()
。
Java 8 では、これははるかに単純であり、代わりに使用できますFiles.find()
。