Интерфейс java.io.FilenameFilter
может быть реализован для фильтрации имен файлов в определенной папке. Интерфейс FilenameFilter
содержит метод boolean accept(File dir, String name)
. Класс должен реализовывать этот метод, а каждый тестируемый файл должен быть включен в общий список файлов.
Пример списка файлов с определенным расширением
Давайте используем java.io.FilenameFilter
, чтобы найти все файлы определенного расширения в определенной папке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
package ua.com.prologistic; import java.io.File; import java.io.FilenameFilter; public class FileNameFilterExample { public static void main(String[] args) { // будем искать в папке tmp String dir = "/Users/prologistic/tmp"; // в этой папке будем искать файлы с расширением .xml String ext = ".xml"; // вызываем метод поиска файлов с расширением .xml в папке tmp findFiles(dir, ext); } // метод поиска private static void findFiles(String dir, String ext) { File file = new File(dir); if(!file.exists()) System.out.println(dir + " папка не существует"); File[] listFiles = file.listFiles(new MyFileNameFilter(ext)); if(listFiles.length == 0){ System.out.println(dir + " не содержит файлов с расширением " + ext); }else{ for(File f : listFiles) System.out.println("Файл: " + dir + File.separator + f.getName()); } } // Реализация интерфейса FileNameFilter public static class MyFileNameFilter implements FilenameFilter{ private String ext; public MyFileNameFilter(String ext){ this.ext = ext.toLowerCase(); } @Override public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(ext); } } } |
Класс MyFileNameFilter
реализует интерфейс FilenameFilter
. Метод accept
проверяет имя файла на наличие определенного расширения. В методе main()
мы вызываем метод findFiles
, который использует MyFileNameFilter
для определения файлов в формате XML.
Результат выполнения программы:
1 2 3 |
Файл: /Users/prologistic/tmp/data.Xml Файл: /Users/prologistic/tmp/DB.xml Файл: /Users/prologistic/tmp/item.XML |
Обратите внимание, что класс MyFileNameFilter
написан таким образом, чтобы игнорировать регистр при проверке расширение файла.