Sobes.tech
Junior

O que pode dizer sobre a interface FileFilter?

sobes.tech IA

Resposta da IA

FileFilter é uma interface funcional no pacote java.io, usada para filtrar ficheiros com base em critérios definidos. Possui um método abstrato: boolean accept(File pathname).

Assinatura do método:

// Verifica se o caminho abstrato especificado corresponde ao nome do ficheiro.
boolean accept(File pathname);

O método accept(File pathname) devolve true se o ficheiro ou diretório representado pelo objeto pathname cumprir as condições do filtro, e false caso contrário.

FileFilter é frequentemente usado em métodos que trabalham com listas de ficheiros, tais como:

  • list(FileFilter filter) na classe File.
  • listFiles(FileFilter filter) na classe File.

Exemplo de uso para filtrar apenas ficheiros (excluindo diretórios):

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

public class OnlyFilesFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Diretório atual

        // Criar um FileFilter para aceitar apenas ficheiros
        FileFilter onlyFilesFilter = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isFile(); // Retorna true se for um ficheiro
            }
        };

        // Usar o filtro para obter a lista de ficheiros
        File[] ficheiros = dir.listFiles(onlyFilesFilter);

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

Uso de expressões lambda (disponível desde Java 8, uma vez que FileFilter é uma interface funcional):

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

public class LambdaFileFilterExample {

    public static void main(String[] args) {
        File dir = new File("."); // Diretório atual

        // Usar expressão lambda como FileFilter
        File[] directories = dir.listFiles(pathname -> pathname.isDirectory()); // Filtro para diretórios

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

FileFilter permite criar critérios de filtragem reutilizáveis para trabalhar com o sistema de ficheiros.