Java FileFilter (с примерами)

Java FileFilter — это фильтр для объектов File, обозначающих файлы и подкаталоги в заданном каталоге. Это функциональный интерфейс, и поэтому его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод.

Использование FileFilter похоже на FilenameFilter, за исключением того, что последний использует только имя файла для принятия решения. FileFilter принимает объекты File и, таким образом, может использоваться для фильтрации файлов на основе других атрибутов, таких как «только для чтения».

1. Класс FileFilter

Класс FileFilter имеет только один метод accept(), который проверяет, следует ли включать указанное абстрактное имя пути в список имен путей.

Возвращает значение true тогда и только тогда, когда pathname должен быть включен в список.

FileFilter logFilefilter = новый FileFilter(){public boolean accept(Файл file) {если(file.getName().endsWith(".log")) {вернуть истину;}вернуть ложь;}};

2. Как использовать FileFilter

Лучший способ использования FileFilter — передать его методу listFiles() класса File, где File представляет расположение каталога.

File directory = new File("/path/directory");File[] files = directory.listFiles(logFilefilter);

3. Пример FileFilter

3.1. Фильтрация всех соответствующих файлов в указанном каталоге

В приведенном примере Java мы находим все файлы журналов из каталога «c:/temp».

File directory = new File("c:/temp");//Verify if it is a valid directoryif(!(directory.exists() && directory.isDirectory())){System.out.println(String.format("Directory %s does not exist", directory));return;}FileFilter logFilefilter = new FileFilter() {public boolean accept(File file) {if(file.getName().endsWith(".log")) {return true;}return false;}};File[] files = directory.listFiles(logFilefilter);for(File f: files){System.out.println(f.getName());}

Приведенная выше программа выведет список всех файлов .log, имеющихся в папке c:/temp.

3.2 Создание FileFilter с помощью лямбда-выражения

Данная программа использует синтаксис лямбда-выражения для создания экземпляра FileFilter. Остальные операции будут такими же.

FileFilter logFileFilter =(file) -> {return file.getName().endsWith(".log");};File[] files = directory.listFiles(logFilefilter); 

Исходный код на Github

Прокрутить вверх