"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo iterar a través de un árbol de directorio en Java?

¿Cómo puedo iterar a través de un árbol de directorio en Java?

Publicado el 2025-02-06
Navegar:647

How Can I Iterate Through a Directory Tree in Java?

iterando a través de un árbol de directorio en java

. un directorio especificado. Esto incluye subdirectorios, proporcionando acceso integral a todo el árbol de directorio. En java, existen enfoques estándar para lograr esta funcionalidad.

file#isDirectory ():

la clase de archivo en java tiene un método llamado isDirectory () que puede se utilizará para determinar si un archivo representa un directorio o un archivo. Si el archivo dado es un directorio, entonces contiene una lista de archivos y directorios, que se puede obtener usando el método listFiles ().

recursivo con archivos#listFiles ():

Un enfoque directo para iterarse a través de un árbol de directorio es usar recursión. El siguiente fragmento demuestra este método:

import java.io.File;

public class DirectoryIterator {

    public static void main(String[] args) {
        File directory = new File("/path/to/dir");
        showFiles(directory.listFiles());
    }

    public static void showFiles(File[] files) {
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("Directory: "   file.getAbsolutePath());
                showFiles(file.listFiles()); // Recursive call
            } else {
                System.out.println("File: "   file.getAbsolutePath());
            }
        }
    }
}

Este enfoque funciona llamando recursivamente a showfiles () en la lista de archivos devueltos por listFiles (). Sin embargo, es importante manejar la excepción de stackoverflowerror, que puede ocurrir si el árbol de directorio es demasiado profundo para que la pila de JVM se maneje.

archivos#walk () para la recursión de la cola:

Para Java 8 y posterior, un enfoque más eficiente es usar archivos#walk (). Este método implementa la recursión de la cola, que evita el problema de stackoverflowerror manteniendo el estado de la iteración en la pila de llamadas de método en lugar de la pila jvm.

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryIteratorWithJava8 {

    public static void main(String[] args) throws Exception {
        Path directory = Paths.get("/path/to/dir");
        Files.walk(directory).forEach(path -> showFile(path.toFile()));
    }

    public static void showFile(File file) {
        if (file.isDirectory()) {
            System.out.println("Directory: "   file.getAbsolutePath());
        } else {
            System.out.println("File: "   file.getAbsolutePath());
        }
    }
}

archivos#walk () genera una secuencia de objetos de ruta que representan los archivos y directorios en el árbol de directorio dado. El método foreach () se usa para procesar cada objeto de ruta y mostrar el archivo o directorio correspondiente.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3