0

自分で再帰的に実行せずに、TrueZip を使用してフォルダーのサイズを取得する方法はありますか? 大量のファイルを含むアーカイブを扱っているため、ランタイムが心配です。

TrueZip 7.7.9 の使用

4

1 に答える 1

1

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、ディレクトリではないファイルシステム エントリにアクセスするとBasicFileAttributessize().

ここにJavadoc ; と使用しますFiles.walkFileTree()

Java 8 では、これははるかに単純であり、代わりに使用できますFiles.find()

于 2016-02-10T18:06:54.700 に答える