Gymterview
junior

Что вы знаете об интерфейсе FileFilter?

FileFilter — функциональный интерфейс из пакета java.io, применяемый для фильтрации файлов и каталогов при получении содержимого каталога через метод File.listFiles(FileFilter).

Интерфейс содержит единственный метод boolean accept(File pathname), который должен вернуть true, если файл соответствует критерию фильтрации. Поскольку FileFilter — функциональный интерфейс (один абстрактный метод), он может быть реализован через лямбда-выражение.

Примеры

Пример
File dir = new File("/home/user/documents");

// Через лямбду: только обычные файлы
File[] files = dir.listFiles(f -> f.isFile());

// Только файлы с расширением .java
File[] javaFiles = dir.listFiles(f -> f.getName().endsWith(".java"));

// Только каталоги
File[] dirs = dir.listFiles(File::isDirectory);

Существует также интерфейс FilenameFilter с методом boolean accept(File dir, String name), который передаёт каталог и имя файла отдельно. FilenameFilter удобнее, когда фильтрация идёт только по имени. В NIO.2 аналогом является DirectoryStream.Filter<Path>, а также glob-шаблоны в Files.newDirectoryStream(path, "*.java").

На собеседовании: объясните, что FileFilter — функциональный интерфейс с методом accept(), используемый для фильтрации результатов listFiles(). Покажите пример с лямбдой и упомяните FilenameFilter как альтернативу.