Cómo escanear una carpeta en Java?

¿Cómo puedo obtener una lista de todos los archivos dentro de una carpeta recursivamente en Java?

¿No estás seguro de cómo quieres representar el árbol? De todos modos, aquí hay un ejemplo que escanea todo el subárbol utilizando la recursión. Los archivos y directorios son tratados por igual. Tenga en cuenta que File.listFiles () devuelve null para no-directorios.

public static void main(String[] args) { Collection all = new ArrayList(); addTree(new File("."), all); System.out.println(all); } static void addTree(File file, Collection all) { File[] children = file.listFiles(); if (children != null) { for (File child : children) { all.add(child); addTree(child, all); } } } 

Java 7 ofrece un par de mejoras. Por ejemplo, DirectoryStream proporciona un resultado a la vez: la persona que llama ya no tiene que esperar a que se completen todas las operaciones de E / S antes de actuar. Esto permite actualizaciones incrementales de la GUI, cancelación anticipada, etc.

 static void addTree(Path directory, Collection all) throws IOException { try (DirectoryStream ds = Files.newDirectoryStream(directory)) { for (Path child : ds) { all.add(child); if (Files.isDirectory(child)) { addTree(child, all); } } } } 

Tenga en cuenta que el temido valor de retorno nulo ha sido reemplazado por IOException.

Java 7 también ofrece un andador de árbol :

 static void addTree(Path directory, final Collection all) throws IOException { Files.walkFileTree(directory, new SimpleFileVisitor() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { all.add(file); return FileVisitResult.CONTINUE; } }); }