Cómo leer todos los archivos de una carpeta en Java

Mohammad Irfan 12 octubre 2023
  1. Cómo leer todos los archivos de una carpeta en Java
  2. Leer todos los archivos de una carpeta usando la clase Files en Java
  3. Leer todos los archivos de una carpeta usando el método newDirectoryStream() en Java
  4. Leer todos los archivos de una carpeta usando el método walkFileTree() en Java
Cómo leer todos los archivos de una carpeta en Java

Este tutorial introduce cómo leer todos los archivos de una carpeta en Java y enumera algunos códigos de ejemplo para entenderlo.

Hay varias maneras de obtener todos los archivos de una carpeta. Aquí podríamos usar las clases File, Files y DirectoryStream, y muchas más. Veamos los ejemplos.

Cómo leer todos los archivos de una carpeta en Java

Aquí, usamos la clase File para recoger todos los archivos y carpetas en el directorio de origen y luego usamos el método isDirectory() para comprobar si es un archivo o una carpeta. Vea el ejemplo a continuación.

import java.io.File;
import java.text.ParseException;

public class SimpleTesting {
  public static void findAllFilesInFolder(File folder) {
    for (File file : folder.listFiles()) {
      if (!file.isDirectory()) {
        System.out.println(file.getName());
      } else {
        findAllFilesInFolder(file);
      }
    }
  }
  public static void main(String[] args) throws ParseException {
    File folder = new File("/home/folder/src");
    findAllFilesInFolder(folder);
  }
}

Leer todos los archivos de una carpeta usando la clase Files en Java

Si quieres usar stream, usa el método walk() de la clase Files que devuelve un stream path. Después de eso, usamos el método filter() para recoger los archivos solamente y usamos forEach() para imprimirlos.

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

public class SimpleTesting {
  public static void main(String[] args) throws IOException {
    try (Stream<Path> paths = Files.walk(Paths.get("/home/folder/src"))) {
      paths.filter(Files::isRegularFile).forEach(System.out::println);
    }
  }
}

Leer todos los archivos de una carpeta usando el método newDirectoryStream() en Java

Aquí, usamos la clase Files y su método newDirectoryStream() que devuelve un flujo de Path. Después de eso, usamos un bucle for-each para iterar la lista de archivos e imprimir el nombre del archivo.

import java.io.IOException;
import java.nio.file.DirectoryIteratorException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class SimpleTesting {
  public static void main(String[] args) throws IOException {
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("/home/folder/src/"))) {
      for (Path file : stream) {
        System.out.println(file.getFileName());
      }
    } catch (IOException | DirectoryIteratorException ex) {
      System.err.println(ex);
    }
  }
}

Leer todos los archivos de una carpeta usando el método walkFileTree() en Java

Aquí, usamos el método walkFileTree() de la clase Files que toma dos argumentos: la carpeta de origen y la referencia SimpleFileVisitor. Mira el ejemplo de abajo.

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class SimpleTesting {
  public static void main(String[] args) throws IOException {
    SimpleFileVisitor<Path> file = new SimpleFileVisitor<Path>() {
      @Override
      public FileVisitResult visitFile(Path filePath, BasicFileAttributes attrs)
          throws IOException {
        System.out.println(filePath);
        return FileVisitResult.CONTINUE;
      }
    };
    Files.walkFileTree(Paths.get("/home/folder/src"), file);
  }
}

Artículo relacionado - Java File

Artículo relacionado - Java IO