import java.io.File;
import java.io.FilenameFilter;
/**
* エントリポイント
*/
public class Main {
public static void main(String[] args) {
File dir = new File("C:\\");//Cドライブのルートディレクトリを開く
//フィルタリングをかけてファイル名を列挙
String []files = dir.list(new MyFilter());
//出力
for(int i=0; i<files.length; ++i){
System.out.println(files[i]);
}
}
}
/**
* フィルタリングクラス
*/
class MyFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
int index = name.lastIndexOf(".");//拡張子の"."を探す
//"."以下の文字列を取り出して全て小文字に
String ext = name.substring(index+1).toLowerCase();
//拡張子が"txt"と一致すれば取り出す
if(ext.equals("txt") == true) {return true;}
//それ以外のファイルはリストアップしない
return false;
}
}
FilenameFilterクラスは、インターフェースとして定義されておりまして、実際に使うときは自分でフィルタリングの真偽を判定するacceptメソッドを実装しなければなりません。まさに、インターフェースのお手本のようなクラスですねー。今作ってるレイトレーサのシェーダクラスもこの作り方で切替えとかできそうです。OOPLに限らず、いろんな言語を使うことで設計について学べることがあって楽しい。関数型言語をもっと触らねばと思う今日この頃。
0 件のコメント:
コメントを投稿