2010-12-15 19 views
3

小さなJavaツールを使用して一連のファイル拡張子に基づいてファイルを取得するには、不正なファイルに遭遇したときにlistFiles()を使用するか、continue;を使用するかを議論しています。カスタムFileFilterまたはFilenameFilterを使用すると、私にとって効果的に同じことができます。FileFilter/FilenameFilterのメリット

これらのメソッドは、スイングファイルブラウジングなどの統合されたツールの便利なメソッドであり、これらのツールのいずれかにフックしていないと手動メソッドよりも効率的ではありません。あれは正しいですか?これらのフィルタツールには他にも利点がありますか?

答えて

2

だから、
public String[] list(FilenameFilter filter) { 
    String names[] = list(); 
    if ((names == null) || (filter == null)) { 
     return names; 
    } 
    ArrayList v = new ArrayList(); 
    for (int i = 0 ; i < names.length ; i++) { 
     if (filter.accept(this, names[i])) { 
      v.add(names[i]); 
     } 
    } 
    return (String[])(v.toArray(new String[v.size()])); 
} 

は、あなたが見ることができるように、基本的には、同じことは、あなたが手動テストを行うようにここで行われています。それがあなたにもたらした唯一の事は、ホイールを再発明する必要がないということです。突然それを行うより早い方法を見つけると、コードを変更する必要はありません:)

+0

主なものは、異なるフィルタ条件(前記コードの外で定義された)を持つファイルをリストするコードをパラメータ化する機能です。 – Thilo

+0

ありがとうございます。最初は、自分でやるほうが簡単だと思ったが、FilenameFilterの実装は効率的(コード化)とクリーンな処理を実現し、実際にコードを少し頑強にすることもできた。 – dimo414

0

いいえ、あなたはそこのお金でそれを得ていると思います。彼らは便利な方法です。彼らは単にという名前をつけて(最初に設定した拡張子を知っています)とし、そうでないもののリストに含めるべきかどうかを確認します。とにかくやっていることとほとんど同じです。 Javaドキュメントから

public boolean accept(File dir, String name) 

テスト指定されたファイルがファイルリストに含めるかどうか。

これはあなたがとにかくやっていることです。 JDK 1.6ソースから

1

はい、彼らは主にファイルフィルタを受け入れるツールのためのものです(または、ロジックを決定するコードは一般に、フィルタの評価を行うコードとは異なります)。フードの下に魔法はありません、あなたは自分のループでできることをやっています。

+0

私は同意します。 Javaライブラリのこの部分は、無用なインタフェースとメソッドで、過剰に設計され、汚染されています。 – Mot

+0

@mklhmnn:既にFileFilterが存在するので、FilenameFilterは冗長だと言えますが、FileFilterを持つのは良い考えです。 – Thilo

関連する問題