3

私は、ディレクトリの内容を読み取り、ファイルの名前と最終変更時刻を出力する単純なJavaプログラムを作成しているところです。

私が予測する問題は、私が読んでいるボールトがかなり巨大であり、単一のディレクトリ内のファイルが20000をはるかに超える可能性がある場合があります。ファイルAPIの使用

    `file.listFiles()` 

次に20000ファイルオブジェクトを作成します。これによりプロセスが遅くなる可能性があり、メモリが肥大化する可能性もあります。

バッチ処理する方法はありますか?つまり、メモリ内のすべてのオブジェクトを一度にロードする代わりに、一度に50ファイルの観点からディレクトリをスキャンするか、少なくとも一度に1つのファイルを反復するようにJavaに指示する方法はありますか?

4

2 に答える 2

5

java.nio.file.Files.walkFileTree(...) 経由で java.nio.file.FileVisitor を使用する必要があります。これはまさにこのユースケースのために Java 7 で導入されました。

于 2012-04-29T15:16:09.727 に答える
1

メモリについては心配しませんが、それらのファイルのディスク アクセス時間については心配します。

ファイルのアクセス時間は 8 ミリ秒、SSD の場合でも 100 マイクロ秒になることがあります。File オブジェクトの作成にかかる時間は、1 マイクロ秒未満になる場合があります。

20,000 個のファイル オブジェクトが重要であることは間違いありませんが、これが主な問題である場合は、非常にうまくやっています。

代わりにこれを使用list()すると、メモリ効率がわずかに向上し、必要な場合にのみファイルを作成できます。

于 2012-04-29T15:06:24.227 に答える