FilenameFilterのクイック使用
1. 序章
Javaには、有益なアノテーション @FunctionalInterface が追加される前に、機能インターフェイスがありました。 FilenameFilterはそのようなインターフェースの1つです。
その使用法を簡単に見て、今日のJavaの世界のどこに適合するかを理解します。
2. ファイル名フィルター
これは機能的なインターフェイスであるため、抽象メソッドが1つだけ必要であり、FilenameFilterは次の定義に従います。
boolean accept(File dir, String name);
3. 使用法
FilenameFilter をほぼ排他的に使用して、ディレクトリ内のすべてのファイル(指定されたフィルターを満たす)を一覧表示します。
オーバーロードされたlist(..)および listFiles(..)メソッドの java.io.File は、FilenameFilterおよびフィルタを満たすすべてのファイルの配列を返します。
次のテストケースは、ディレクトリ内のすべてのjsonファイルをフィルタリングします。
@Test
public void whenFilteringFilesEndingWithJson_thenEqualExpectedFiles() {
FilenameFilter filter = (dir, name) -> name.endsWith(".json");
String[] expectedFiles = { "people.json", "students.json" };
File directory = new File(getClass().getClassLoader()
.getResource("testFolder")
.getFile());
String[] actualFiles = directory.list(filter);
Assert.assertArrayEquals(expectedFiles, actualFiles);
}
3.1. FileFilter as BiPredicate
Oracleは、Java 8に40を超える機能インターフェイスを追加しました。レガシーインターフェイスとは異なり、これらは汎用です。 つまり、これらを任意の参照型に使用できるということです。
BiPredicate
boolean test(T t, U u);
つまり、 FilenameFilter は、 BiPredicate の特殊なケースであり、 TはFileであり、Uは文字列。
4. 結論
現在、汎用のPredicateおよびBiPredicate機能インターフェイスがありますが、既存のJavaで使用されているという理由だけで、FilenameFilterの発生が引き続き表示されます。 ]ライブラリ。
また、それはその単一の目的を十分に果たしているので、該当する場合にそれを使用しない理由はありません。
いつものように、すべての例はGitHubでから入手できます。