Método listFiles() de Java File

Java File Java File


listFiles()El método listFiles() es, en Java,java.io.Fileun método importante proporcionado por la clase File, que se utiliza para obtener todos los archivos y subdirectorios del directorio actual. Este método devuelve unFilearray de objetos File, cadaFileobjeto representa un archivo o subdirectorio del directorio.

Sintaxis del método

listFiles()El método tiene las siguientes formas sobrecargadas:

public File[] listFiles()
public File[] listFiles(FilenameFilter filter)
public File[] listFiles(FileFilter filter)

Uso básico

Obtener todos los archivos y subdirectorios de un directorio

El uso más básico es, sin pasar ningún parámetro, llamar directamente allistFiles()método:

Ejemplo

import java.io.File;

public class ListFilesExample {
    public static void main(String[] args) {
        // Crear un objeto File que representa el directorio
        File directory = new File("C:/example");
       
        // Obtener todos los archivos y subdirectorios del directorio
        File[] files = directory.listFiles();
       
        // Recorrer e imprimir los nombres de los archivos
        if (files != null) {
            for (File file : files) {
                System.out.println(file.getName());
            }
        }
    }
}

Parámetros del método

Interfaz FilenameFilter

FilenameFilterEs una interfaz funcional utilizada para filtrar nombres de archivo:

Ejemplo

File[] listFiles(FilenameFilter filter)

Ejemplo: listar solo.txtarchivos

Ejemplo

File directory = new File("C:/example");
File[] textFiles = directory.listFiles((dir, name) -> name.endsWith(".txt"));

Interfaz FileFilter

FileFilterTambién es una interfaz funcional, pero se basa enFileobjetos File para filtrar:

Ejemplo

File[] listFiles(FileFilter filter)

Ejemplo: listar solo directorios

Ejemplo

File directory = new File("C:/example");
File[] subDirectories = directory.listFiles(File::isDirectory);

Consideraciones

  1. Verificación de puntero nulo: siFileel objeto no es un directorio o no tiene permisos de lectura,listFiles()listFiles() devolverá nullnull, por lo que se debe comprobar el valor de retorno.

  2. Consideraciones de rendimiento: para directorios con una gran cantidad de archivos,listFiles()puede consumir bastante memoria, ya que carga toda la información de los archivos de una sola vez.

  3. Problema de ordenación: el array de archivos devuelto no garantiza ningún orden específico; si se necesita ordenar, se puede ordenar el array manualmente.

  4. Enlaces simbólicos: en sistemas Unix/Linux,listFiles()listFiles() sigue los enlaces simbólicos.


Ejemplos de aplicación práctica

Listar todos los archivos recursivamente

Ejemplo

import java.io.File;

public class RecursiveFileListing {
    public static void listFilesRecursively(File directory) {
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    listFilesRecursively(file);
                } else {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
   
    public static void main(String[] args) {
        listFilesRecursively(new File("C:/example"));
    }
}

Usar la API Stream de Java 8

Ejemplo

import java.io.File;
import java.util.Arrays;
import java.util.stream.Stream;

public class FileStreamExample {
    public static void main(String[] args) {
        File directory = new File("C:/example");
       
        // Usar Stream para procesar archivos
        Stream.of(directory.listFiles())
              .filter(File::isFile)
              .map(File::getName)
              .forEach(System.out::println);
    }
}

Alternativas

En Java 7 y versiones posteriores, se puede considerar el uso dejava.nio.filelas clases del paquete java.nio.fileFilesyPathque proporcionan una forma más moderna de trabajar con archivos:

Ejemplo

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class NioFileListing {
    public static void main(String[] args) throws Exception {
        Path dir = Paths.get("C:/example");
       
        try (Stream<Path> stream = Files.list(dir)) {
            stream.filter(Files::isRegularFile)
                  .map(Path::getFileName)
                  .forEach(System.out::println);
        }
    }
}

Resumen

listFiles()El método es una herramienta básica en el manejo de archivos en Java; dominar su uso es muy importante para el procesamiento de archivos. En el desarrollo real, se debe elegir el método de filtrado adecuado según las necesidades específicas y prestar atención al manejo de posibles excepciones. Para proyectos nuevos, se recomienda considerar el uso de la clase Files de Java NIO,Filesla cual proporciona operaciones de archivo más potentes y flexibles.

Java File Java File

Otras extensiones