Sobes.tech
Junior

Ce puteți spune despre interfața FileFilter?

sobes.tech AI

Răspuns de la AI

FileFilter este o interfață funcțională din pachetul java.io, utilizată pentru filtrarea fișierelor pe baza unor criterii specificate. Are o metodă abstractă: boolean accept(File pathname).

Semnătura metodei:

// Verifică dacă calea abstractă specificată corespunde numelui fișierului.
boolean accept(File pathname);

Metoda accept(File pathname) returnează true dacă fișierul sau directorul reprezentat de obiectul pathname îndeplinește condițiile filtrului, și false în caz contrar.

FileFilter este adesea folosit în metode care lucrează cu liste de fișiere, cum ar fi:

  • list(FileFilter filter) în clasa File.
  • listFiles(FileFilter filter) în clasa File.

Exemplu de utilizare pentru filtrarea doar a fișierelor (excluzând directoarele):

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

public class OnlyFilesFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Directorul curent

        // Creăm un FileFilter pentru acceptarea doar a fișierelor
        FileFilter onlyFilesFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile(); // Returnează true dacă este fișier
            }
        };

        // Folosim filtrul pentru a obține lista de fișiere
        File[] fichiers = dir.listFiles(onlyFilesFilter);

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

Utilizarea expresiilor lambda (disponibilă din Java 8, deoarece FileFilter este o interfață funcțională):

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

public class LambdaFileFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Directorul curent

        // Folosim o expresie lambda ca FileFilter
        File[] directories = dir.listFiles(pathname -> pathname.isDirectory()); // Filtru pentru directoare

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

FileFilter permite crearea de criterii de filtrare reutilizabile pentru lucrul cu sistemul de fișiere.