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

5 minutos de lectura

¿Como leer todos los archivos en una carpeta de Java
M.J.

¿Cómo leer todos los archivos en una carpeta a través de Java? No importa qué API.

  • Estoy de acuerdo, señale la clase a usar para que el cartel pueda familiarizarse con los diversos métodos; de lo contrario, el cartel no se molesta en leer la API para averiguar qué otros métodos están disponibles.

    – camickr

    4 de diciembre de 2009 a las 3:48

  • ¿Quiso decir todos los archivos en una carpeta o todos los archivos en una carpeta y todas las subcarpetas?

    -Jim Garrison

    4 de diciembre de 2009 a las 4:36

  • Un enlace actualizado a la API: docs.oracle.com/javase/7/docs/api/java/io/File.html

    – Tom Duckering

    27/04/2014 a las 16:10

  • Si está utilizando Java 7 o más reciente, puede usar Files.walkFileTreeconsulte stackoverflow.com/a/23814217/1115554

    – micha

    22 de mayo de 2014 a las 18:08

¿Como leer todos los archivos en una carpeta de Java
David Robles

File folder = new File("/Users/you/folder/");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

  • Creo que esto imprimirá los nombres de los directorios y no los nombres de los archivos.

    – Fortega

    4 de diciembre de 2009 a las 10:17

  • Mucho más fácil de entender que la respuesta aceptada. +1.

    – sam1370

    14 de julio de 2018 a las 1:37


  • @ sam1370 Debido a que esto no lee todos los archivos en el directorio, solo obtiene los archivos directamente dentro del directorio dado. Si el directorio dado contiene otros directorios, su contenido no se leerá

    – Farid

    11 de febrero de 2021 a las 7:12

  • Obteniendo un error con .map(Path::toFile) También .forEach(path -> System.out.println(path.toString()); debería ser .forEach(path -> System.out.println(path.toString( )));

    – Xaoling Bao

    13 de octubre de 2014 a las 4:33

  • Dice “Referencia de método no válida, no se puede encontrar el símbolo” “Method toFile” ¿se supone que toFile es otra cosa?

    – Xaoling Bao

    13/10/2014 a las 21:18

  • ¿Puedes pegar tu código en un PasteBin? Estas usando java.nio.file.Path? Acabo de comprobar que el método toFile() debería existir incluso antes de Java 8 -> docs.oracle.com/javase/7/docs/api/java/nio/file/…

    – Julián Pieles

    14 de octubre de 2014 a las 9:44


  • @NadjibMami Por favor, eche un vistazo aquí: razem.io/blog/posts/year2015/0819_try_catch_lambda Fue compilado para responder en un comentario. Así que escribí una publicación rápida en el blog.

    – Julián Pieles

    19 de agosto de 2015 a las 10:29

  • Si alguien todavía está buscando el tema Try Catch Lambda, la URL de mi blog ha sido cambiada -> razem.io/blog/y2015/0819_try_catch_lambda.html

    – Julián Pieles

    2 de diciembre de 2015 a las 10:17

Todas las respuestas sobre este tema que hacen uso de las nuevas funciones de Java 8 se olvidan de cerrar la transmisión. El ejemplo en la respuesta aceptada debería ser:

try (Stream<Path> filePathStream=Files.walk(Paths.get("/home/you/Desktop"))) {
    filePathStream.forEach(filePath -> {
        if (Files.isRegularFile(filePath)) {
            System.out.println(filePath);
        }
    });
}

Del javadoc de la Files.walk método:

El flujo devuelto encapsula uno o más DirectoryStreams. Si se requiere la eliminación oportuna de los recursos del sistema de archivos, se debe usar la construcción try-with-resources para garantizar que se invoque el método de cierre de la secuencia después de que se completen las operaciones de la secuencia.

  • Nunca debe iterar con Stream. Tomas una referencia de Stream, la usas y la eliminas.

    – Rodolfo Schmidt

    16 mayo 2017 a las 16:51

  • @RudolfSchmidt, ¿quieres decir “tirarlo”?

    – roland

    18 mayo 2017 a las 10:47

  • Quiero decir que la forma correcta es usarlo de esa manera: Files.walk(Paths.get(“/home/you/Desktop”)).filter(Files::isRegularFile).forEach(filePath->…)

    – Rodolfo Schmidt

    19 mayo 2017 a las 11:44

1646977569 373 ¿Como leer todos los archivos en una carpeta de Java
xxxcepción

Una observación de acuerdo con obtener todos los archivos en el directorio.
El método Files.walk(path) devolverá todos los archivos recorriendo el árbol de archivos arraigado en el archivo iniciado dado.

Por ejemplo, está el siguiente árbol de archivos:

\---folder
    |   file1.txt
    |   file2.txt
    |
    \---subfolder
            file3.txt
            file4.txt

Utilizando el java.nio.file.Files.walk(Path):

Files.walk(Paths.get("folder"))
        .filter(Files::isRegularFile)
        .forEach(System.out::println);

Da el siguiente resultado:

folder\file1.txt
folder\file2.txt
folder\subfolder\file3.txt
folder\subfolder\file4.txt

Para obtener todos los archivos solo en el directorio actual, use el java.nio.file.Files.list(Path):

Files.list(Paths.get("folder"))
        .filter(Files::isRegularFile)
        .forEach(System.out::println);

Resultado:

folder\file1.txt
folder\file2.txt

  • Nunca debe iterar con Stream. Tomas una referencia de Stream, la usas y la eliminas.

    – Rodolfo Schmidt

    16 mayo 2017 a las 16:51

  • @RudolfSchmidt, ¿quieres decir “tirarlo”?

    – roland

    18 mayo 2017 a las 10:47

  • Quiero decir que la forma correcta es usarlo de esa manera: Files.walk(Paths.get(“/home/you/Desktop”)).filter(Files::isRegularFile).forEach(filePath->…)

    – Rodolfo Schmidt

    19 mayo 2017 a las 11:44

1646977570 843 ¿Como leer todos los archivos en una carpeta de Java
Geoff Reedy

import java.io.File;


public class ReadFilesFromFolder {
  public static File folder = new File("C:/Documents and Settings/My Documents/Downloads");
  static String temp = "";

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Reading files under the folder "+ folder.getAbsolutePath());
    listFilesForFolder(folder);
  }

  public static void listFilesForFolder(final File folder) {

    for (final File fileEntry : folder.listFiles()) {
      if (fileEntry.isDirectory()) {
        // System.out.println("Reading files under the folder "+folder.getAbsolutePath());
        listFilesForFolder(fileEntry);
      } else {
        if (fileEntry.isFile()) {
          temp = fileEntry.getName();
          if ((temp.substring(temp.lastIndexOf('.') + 1, temp.length()).toLowerCase()).equals("txt"))
            System.out.println("File= " + folder.getAbsolutePath()+ "\\" + fileEntry.getName());
        }

      }
    }
  }
}

  • ¡Bienvenido a Stack Overflow! En lugar de solo publicar un bloque de código, por favor explicar por qué este código resuelve el problema planteado. Sin una explicación, esto no es una respuesta.

    – Martijn Pieters

    23 de noviembre de 2012 a las 16:02


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad