2012-01-16 9 views
1

可能な重複ファイルの無修正:
Is there a workaround for Java's poor performance on walking huge directories?リストはJavaでディレクトリから

私はFile.listFilesを使用して、いくつかのディレクトリ内のすべてのファイルを一覧表示し、ユーティリティを作成します()の機能ですが、そのディレクトリの下に膨大な量のファイル(約100K)をコピーしたときに問題が発生しました。私はいくつかの解決策を探していた

は、実際にいくつかは、そのディレクトリおよびプロセスから(Xを言う)ファイルの一切を固定して、それらのファイルを削除し、ファイルの次のX番号を取る取らない取ります。 誰でも私に解決策を提案することができます。

+1

以下のパウルスの提案は上記のリンクよりもエレガントだと思いますが、それは私の意見です – Kennet

答えて

2

一つの解決策は、ファイルの特定の番号の後にfalseを返すのいずれかFileNameFilterを使用することができ

よろしくあなたは例外少しを乱用する用意がある場合は、その時点でExceptionを投げ、受け入れたりしています。

class CountedFilter implements FilenameFilter { 
    int limit = 0; 

    public CountedFilter (int limit) { 
    this.limit = limit; 
    } 

    public boolean accept(File file, String string) { 
    return limit-- > 0; 
    } 

} 


どこにも近いとして簡潔であるが、私はより効果的であると考えている別のオプションがあります。これには BlockingQueueを介して各ファイルを発信者に返信する FilenameFilterが含まれています。 File.listは別のスレッドで呼び出されるため、完了するまで待つ必要はありません。

このソリューションはFile.listがはるかにイテレータのように、よりスムーズな液の製造実行中にファイルを処理することができるという利点もあります。奨励された場合、私はコードを別の回答として掲示します。

+0

私は確かにわかりませんが、FileNameFilterを使用しても何のメリットも見ません。実際にはディレクトリのファイルタイプは同じです。ランダムは、日時に基づいて、私は有望に見えるこのFileNameFilter .. – SaQiB

+0

を使用することができますどのように、私はこれを試してみましょう。今はありがとう。 – SaQiB

+0

これは、予測可能な順序でファイルを配信しないことに注意してください。最も古いファイルだけを選択するには、それらをすべてリストする必要があります。 – OldCurmudgeon

関連する問題