Sobes.tech
Junior

Co możesz powiedzieć o interfejsie FileFilter?

sobes.tech AI

Odpowiedź od AI

FileFilter jest funkcjonalnym interfejsem w pakiecie java.io, używanym do filtrowania plików na podstawie określonych kryteriów. Posiada jedną metodę abstrakcyjną: boolean accept(File pathname).

Sygnatura metody:

// Sprawdza, czy podana ścieżka abstrakcyjna pasuje do nazwy pliku.
boolean accept(File pathname);

Metoda accept(File pathname) zwraca true, jeśli plik lub katalog reprezentowany przez obiekt pathname spełnia warunki filtra, w przeciwnym razie false.

FileFilter jest często używany w metodach pracujących z listami plików, takich jak:

  • list(FileFilter filter) w klasie File.
  • listFiles(FileFilter filter) w klasie File.

Przykład użycia do filtrowania tylko plików (wykluczając katalogi):

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

public class OnlyFilesFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Bieżący katalog

        // Tworzymy FileFilter akceptujący tylko pliki
        FileFilter onlyFilesFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile(); // Zwraca true, jeśli to plik
            }
        };

        // Używamy filtra do pobrania listy plików
        File[] fichiers = dir.listFiles(onlyFilesFilter);

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

Użycie wyrażeń lambda (dostępne od Java 8, ponieważ FileFilter jest interfejsem funkcyjnym):

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

public class LambdaFileFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Bieżący katalog

        // Użycie wyrażenia lambda jako FileFilter
        File[] directories = dir.listFiles(pathname -> pathname.isDirectory()); // Filtr dla katalogów

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

FileFilter pozwala na tworzenie wielokrotnego użytku kryteriów filtrowania do pracy z systemem plików.