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


¿Cómo leer todos los archivos en una carpeta a través de Java?


506
2017-12-04 03:39


origen


Respuestas:


public void listFilesForFolder(final File folder) {
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry);
        } else {
            System.out.println(fileEntry.getName());
        }
    }
}

final File folder = new File("/home/you/Desktop");
listFilesForFolder(folder);

Files.walk API está disponible desde Java 8.

try (Stream<Path> paths = Files.walk(Paths.get("/home/you/Desktop"))) {
    paths
        .filter(Files::isRegularFile)
        .forEach(System.out::println);
} 

El ejemplo usa try-with-resources patrón recomendado en la guía API. Asegura que, sin importar las circunstancias, la transmisión se cerrará.


768
2017-12-04 11:21



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

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

131
2017-12-04 03:41



En Java 8 puedes hacer esto

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

que imprimirá todos los archivos en una carpeta sin incluir todos los directorios. Si necesita una lista, lo siguiente será:

Files.walk(Paths.get("/path/to/folder"))
     .filter(Files::isRegularFile)
     .collect(Collectors.toList())

Si quieres regresar List<File> en lugar de List<Path> simplemente asócielo:

List<File> filesInFolder = Files.walk(Paths.get("/path/to/folder"))
                                .filter(Files::isRegularFile)
                                .map(Path::toFile)
                                .collect(Collectors.toList());

¡También debes asegurarte de cerrar la transmisión! De lo contrario, es posible que se encuentre con una excepción que le indica que hay demasiados archivos abiertos. Leer aquí para más información.


87
2017-10-06 12:08



Todas las respuestas sobre este tema que hacen uso de las nuevas funciones de Java 8 están dejando de cerrar la secuencia. 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:

La secuencia devuelta encapsula uno o más DirectoryStreams. Si   la eliminación oportuna de los recursos del sistema de archivos es necesaria,   la construcción try-with-resources debería usarse para asegurar que   el método de cierre de la ruta se invoca después de que se completen las operaciones de la secuencia.


20
2017-12-03 17:27



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());
        }

      }
    }
  }
}

10
2017-11-23 15:43



private static final String ROOT_FILE_PATH="/";
File f=new File(ROOT_FILE_PATH);
File[] allSubFiles=f.listFiles();
for (File file : allSubFiles) {
    if(file.isDirectory())
    {
        System.out.println(file.getAbsolutePath()+" is directory");
        //Steps for directory
    }
    else
    {
        System.out.println(file.getAbsolutePath()+" is file");
        //steps for files
    }
}

9
2017-08-05 08:55



Simplemente revise todos los archivos usando Files.walkFileTree (Java 7)

Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        System.out.println("file: " + file);
        return FileVisitResult.CONTINUE;
    }
});

6
2018-05-22 18:06