FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FilenameFilterを使わずにフィルタリング

java.io.FilenameFilterを使わずに、Fileのlist結果をフィルタリングする方法。
といっても、FileとFilenameFilterが実装してくれている部分を自前で実装するだけだが。



 指定したディレクトリの特定の拡張子のファイルだけを取り出したい場合などは通常、Fileクラスの public String[] list(FilenameFilter filter)を使用する。

~略~
 file.list(new FileFilter());
~略~
class FilterClass implements FilenameFilter{
 private static final String EXTENT = ".jar";

 public boolean accept(File dir, String name) {
  return name.endsWith(EXTENT);
 }
}



 しかし、この方法の場合、新たにFilenameFilterを実装したクラス(上記例のFilterClassにあたるクラス)を作成する必要がある。
 何らかの理由で新たにクラスを作成したくない場合には、自分で実装してやることもできる。

~略~
 list = glt.getList(dir);
~略~
 private String[] getList(File dir){

  //フィルタなしにリストを取得
  String[] list = dir.list();

  //フィルタ後の結果格納用のListを作成
  ArrayList result = new ArrayList();

  for(String file : list){
   //ここでFilenameFilterのacceptの内容を実装
   if(file.endsWith(EXTENT)){
    result.add(file); //結果に追加
   }
  }

  //Listを配列に変換して返却
  return (String[]) result.toArray(new String[result.size()]);
 }




 ちなみに簡単に速度測定してみたが、どちらの方式でもほとんど速度に違いはなかった。
 (ほとんど同じ実装なので当たり前だが)

 * 普通はFilenameFilterを使用しない理由がないので、FilenameFilterを使用したほうが良い。


以上。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

検索フォーム
プロフィール

takuan93

Author:takuan93
本ブログの説明書→「ReadMe」

管理者に連絡

カテゴリ
WiX (5)
Ant (1)
フリーエリア
最新記事
カウンター
カレンダー
08 | 2018/09 | 10
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。