2012-04-29 4 views
3

私はディレクトリ の内容を読み込み、ファイルの名前と最終変更時刻を出力する簡単なJavaプログラムを書き出しています。ファイルapiを使用してディレクトリを読み込む:20000〜30000のファイルを含むディレクトリを処理する方法は?

私はforsee問題であり、私が読んでいる金庫はかなり巨大であり、単一のディレクトリに ファイルがうまくファイルAPIを使用して20000 を超えることができ、いくつかのケースがある

`file.listFiles()` 

は、これにより、次に作成します20000ファイルオブジェクト、私の心配はこの プロセスを遅くする可能性があります、また、メモリを膨らませる可能性があります。

一度に50個のファイルの面でディレクトリをスキャンするためにJavaを伝えるために、すなわちバッチへの道か、少なくとも一度に一つのファイルを反復処理する代わりに、一度

答えて

5

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

1

でメモリ内のすべてのオブジェクトをロードし、私は」wouldnがありますメモリを気にせずに、これらのファイルのディスクアクセス時間を心配しています。

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

20,000個のFileオブジェクトが重要ではないことは間違いありませんが、これが主な問題であれば、非常にうまくいきます。

代わりにlist()を使用すると、少しメモリの効率が良くなり、必要なときにのみファイルを作成できます。

+0

しかし最後に変更されたタイムスタンプにアクセスするには、ファイル名を持つファイルオブジェクトを作成する必要があります。それはプロセスを遅くすることしかできません。あなたは考えています – Sudhakar

+0

それは数マイクロ秒1つのファイルlastModified()より少ないアクセス。私はあなたができる最も簡単な方法でコードを書くだろう。 –

関連する問題