File#listFilesでFileオブジェクトの配列を取得するとき、FileFilterを引数に与えると、取得してくるFileオブジェクトを絞り込むことができる。
ただそのためのFileFilterクラスは自分で自作しないとならない。
FileFilterはインターフェースなので、実装(implements)した個別クラスを定義し、「accept」メソッドを実装する。
例えば「名前がAで始まるもの」という場合は
import java.io.*; public class TestFileFilter implements FileFilter { public boolean accept(File pathname) { if (pathname != null) { return pathname.getName().startsWith("A"); } else { return false; } } }
として
File[] fileList = new File(".").listFiles(new TestFileFilter());
とすれば「名前がAではじまる」に該当するものだけがFile[]の配列として返却される。
要するに重要なのは「accept」メソッドで、このメソッドの実装内容に絞り込みたい条件をロジックで組めばいいだけなのである。
引数のpathname(Fileオブジェクト)はlistFilesが無引数のときに対象になる全Fileオブジェクトだとおもえばいい。
このpathnameになんらかの条件をひっかけて絞り込む(フィルタする)のである。
ちなみにFile#listFilesはデフォルトでディレクトリもファイルも対象にするので、FileFilterを使えばlistFilesの実行時点でこれの絞り込みもできる。
毎回無引数のFile#listFilesを使って、ループしながらFile#isFileで処理判定していたのに煩わしく思ったため、今回備忘録替わりにメモとして起こす。