Sobes.tech
Junior

Какво можете да разкажете за интерфейса FileFilter?

sobes.tech AI

Отговор от AI

FileFilter е функционален интерфейс в пакета java.io, който се използва за филтриране на файлове въз основа на зададени критерии. Той има един абстрактен метод: boolean accept(File pathname).

Подпис на метода:

// Проверява дали даденият абстрактен път съответства на името на файла.
boolean accept(File pathname);

Методът accept(File pathname) връща true, ако файлът или директорията, представени от обекта pathname, отговарят на условията на филтъра, и false в противен случай.

FileFilter често се използва в методи, които работят със списъци с файлове, като:

  • list(FileFilter filter) в класа File.
  • listFiles(FileFilter filter) в класа File.

Пример за използване за филтриране само на файлове (изключвайки директории):

import java.io.File;
import java.io.FileFilter;

public class OnlyFilesFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Текуща директория

        // Създаваме FileFilter за приемане само на файлове
        FileFilter onlyFilesFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile(); // Връща true, ако е файл
            }
        };

        // Използваме филтъра за получаване на списък с файлове
        File[] fichiers = dir.listFiles(onlyFilesFilter);

        if (fichiers != null) {
            for (File fichier : fichiers) {
                System.out.println(fichier.getName());
            }
        }
    }
}

Използване на ламбда изрази (достъпно от Java 8, тъй като FileFilter е функционален интерфейс):

import java.io.File;
import java.io.FileFilter;

public class LambdaFileFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Текуща директория

        // Използване на ламбда израз като FileFilter
        File[] directories = dir.listFiles(pathname -> pathname.isDirectory()); // Филтър за директории

        if (directories != null) {
            for (File directory : directories) {
                System.out.println(directory.getName());
            }
        }
    }
}

FileFilter позволява създаването на повторно използваеми критерии за филтриране за работа с файловата система.