Filtro de archivos en Java

Sheeraz Gul 12 octubre 2023
  1. FileFilter del paquete IO en Java
  2. FileFilter del paquete Apache Commons IO en Java
Filtro de archivos en Java

Este tutorial demuestra cómo usar FileFilter en Java.

FileFilter se usa para filtrar archivos con una extensión particular. El paquete incorporado de Java IO y Apache Commons IO proporcionan las clases e interfaces para que FileFilter realice operaciones de filtrado de archivos.

FileFilter del paquete IO en Java

El FileFilter es una clase del paquete Java IO que se utiliza como filtro para los archivos y subdirectorios de la ruta dada. La clase FileFilter toma objetos File y los filtra en función de atributos como solo lectura, etc.

El FileFilter tiene un solo método, accept(), que se utiliza para comprobar si el resumen especificado debe incluirse en la lista o no. Aquí hay un ejemplo de cómo usar el método aceptar():

FileFilter Demo_Filefilter = new FileFilter() {
  public boolean accept(File Demo_File) {
    if (Demo_File.getName().endsWith(".txt")) {
      return true;
    }
    return false;
  }
};

Ahora, la mejor manera de usar el FileFilter es pasar el FileFilter al método listfiles() que representa la ubicación del directorio.

Probemos un ejemplo en ejecución:

package delftstack;

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

public class Example {
  public static void main(String[] args) {
    File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

    // check if the directory is valid directory
    if (!(File_Directory.exists() && File_Directory.isDirectory())) {
      System.out.println(String.format("This Directory does not exist", File_Directory));
      return;
    }

    FileFilter Demo_Filefilter = new FileFilter() {
      public boolean accept(File Demo_File) {
        if (Demo_File.getName().endsWith(".txt")) {
          return true;
        }
        return false;
      }
    };

    File[] Text_Files = File_Directory.listFiles(Demo_Filefilter);

    for (File Demo_File : Text_Files) {
      System.out.println(Demo_File.getName());
    }
  }
}

El código anterior filtra los archivos con la extensión .txt.

Ver salida:

delftstack.txt

El FileFilter también se puede implementar usando la expresión lambda donde la sintaxis es menos y mucho más fácil.

Ver ejemplo:

package delftstack;

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

public class Example {
  public static void main(String[] args) {
    File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

    // check if the directory is valid directory
    if (!(File_Directory.exists() && File_Directory.isDirectory())) {
      System.out.println(String.format("This Directory does not exist", File_Directory));
      return;
    }

    FileFilter Demo_FileFilter = (Demo_File) -> {
      return Demo_File.getName().endsWith(".txt");
    };

    File[] Text_Files = File_Directory.listFiles(Demo_FileFilter);

    for (File Demo_File : Text_Files) {
      System.out.println(Demo_File.getName());
    }
  }
}

El código anterior funcionará de manera similar y devolverá los archivos con la extensión .txt.

Ver salida:

delftstack.txt

FileFilter del paquete Apache Commons IO en Java

El paquete FileFilter de Apache Commons-IO se utiliza para realizar las diferentes operaciones de filtrado de archivos, que incluyen elegir un archivo con una extensión particular, un archivo que comienza o termina con un carácter en particular, etc. El paquete FileFilter de Apache Commons proporciona filtros primitivos y booleanos, lo que significa que algunos de los filtros devolverán un valor primitivo y otros un valor booleano.

Consulte las tablas a continuación.

Los filtros primitivos:

Método Descripción
DirectoryFilter Sólo aceptará directorios.
PrefixFileFilter Filtra en base a un prefijo.
SuffixFileFilter Filtra en base a un sufijo.
NameFileFilter Se utiliza para filtrar en función de un nombre de archivo.
WildcardFileFilter Se utiliza para filtrar en base a comodines.
AgeFileFilter Filtra en función de la hora de última modificación de un archivo.
SizeFileFilter Filtra según el tamaño del archivo.

Los filtros booleanos:

Método Descripción
TrueFileFilter Aceptará todos los archivos.
FalseFileFilter No aceptará archivos.
NotFileFilter Aplicará un NOT lógico a un filtro existente.
AndFileFilter Combinará los dos filtros usando un Y lógico.
OrFileFilter Combinará dos filtros usando un O lógico.

Intentemos usar un filtro de los métodos anteriores en un ejemplo:

package delftstack;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.SuffixFileFilter;

public class Example {
  public static void main(String[] args) {
    try {
      Suffix_FileFilter();
    } catch (IOException iox) {
      System.out.println(iox.getMessage());
    }
  }
  public static void Suffix_FileFilter() throws IOException {
    // current directory
    File Current_Directory = new File(".");
    // all files and directories in the current directory
    String[] All_Files = Current_Directory.list();
    System.out.println("All files and directories :\n");
    for (int i = 0; i < All_Files.length; i++) {
      System.out.println(All_Files[i]);
    }
    System.out.println("\nThe Text Files: \n");
    String[] Text_Files = Current_Directory.list(new SuffixFileFilter("txt"));
    for (int i = 0; i < Text_Files.length; i++) {
      System.out.println(Text_Files[i]);
    }
  }
}

El código anterior usa el SuffixFileFilter para filtrar los archivos de texto del directorio dado. También enumera todos los archivos y subdirectorios de la carpeta proporcionada.

Ver la salida:

All files and directories :

.classpath
.gitignore
.project
bin
delftstack.fxml
delftstack.fxml.bak
delftstack.pdf
Delftstack.png
delftstack.txt
delftstack.xml
delftstack.zip
DemoClassBytes.ser
employee.json
ExampleClassBytes.ser
Makefile
pom.xml
PythonFromJava.py
readme.md
src
student.json

The Text Files:

delftstack.txt
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java File