El uso de Java List Directory es muy común . Probablemente será una de las búsquedas de google más habituales en el mundo Java. Recordemos que el api de Java IO esta soportado desde la primera versión de Java por lo tanto el código para realizar esta operación es un clásico. Supongamos que disponemos de una carpeta con los siguiente ficheros y queremos listarlos por la consola.
Para realizar un listado de forma clásica usaremos el siguiente bloque de código:
package com.arquitecturajava; import java.io.File; public class Principal { public Principal() { // TODO Auto-generated constructor stub } public static void main(String[] args) { File micarpeta= new File("micarpeta"); File[] listaFicheros=micarpeta.listFiles(); for (int i=0;i<listaFicheros.length;i++) { System.out.println(listaFicheros[i].getName()); } } }
El resultado se imprime en la consola:
De la misma forma podemos hacer algo similar y quedarnos únicamente con el listado de carpetas apoyándonos en el método isDirectory de la clase File.
File micarpeta= new File("micarpeta"); File[] listaFicheros=micarpeta.listFiles(); for (int i=0;i<listaFicheros.length;i++) { if (listaFicheros[i].isDirectory()) { System.out.println(listaFicheros[i].getName()); } }
El resultado solo muestra las carpetas:
Java List Directory Streams
El código es razonable. Ahora bien ¿Se podría hacer de una forma más elegante utilizando Java8? .La verdad es que sí , sin ninguna duda. Vamos a verlo:
package com.arquitecturajava; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class Principal2 { public static void main(String[] args) throws IOException { Files.list(Paths.get("micarpeta")).forEach(System.out::println); } }
El concepto de Java List Directory se simplifica claramente y el resultado es idéntico.
Acabamos de usar un Stream de Java 8 para recorrer un directorio.De la misma forma podríamos utilizar el método filter y un predicado para filtrar los elementos del directorio y mostrar únicamente las carpeta.
Veamoslo:
package com.arquitecturajava; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; public class Principal2 { public Principal2() { // TODO Auto-generated constructor stub } public static void main(String[] args) throws IOException { Files.list(Paths.get("micarpeta")).filter(Files::isDirectory).forEach(System.out::println); } }
Con estos ejemplos podemos ver como Java 8 simplifica de forma clara alguna de las operaciones más clásicas de Java IO.
Otros artículos relacionados:
Tengo un problema, he utilizado la clase File para recorreo los archivos que contiene una carpeta dentro, para luego posteriormente poder llamar a un método que me va a convertir todos los archivos y carpetas dentro de la carpeta fuenta a zip pero dejándolos por individual dentro de la misma carpeta. La primera vez que la clase File la utilizo para recorrer los archivos y mostrar el contenido, la primera vez que ejecuto el programa pues me muestra los archivos y carpetas correctamente. El error viene ahora cuando coprime cada archivo lo hace correctamente, pero luego si borro esos archivos… Read more »
has probado con file walk
gracias por responder lo antes posible.
habían archivos ocultos en la carpeta, ese era el problema, utilizo un Mac y a veces el sistema genera archivos ocultos y utilizando el método isHidden pude solucionar lo que quería.
También me di cuenta al hacer visible los archivos ocultos del sistema.
Gracias una vez más por su gran aporte
Muy buena la explicación, como podría ser una versión del ejemplo pero recursiva, es decir, que liste todos los archivos a partir de una ruta (incluyendo archivos de carpetas internas)
Sino recuerdo mal hay un método watch que te ayuda con las operaciones recursivas , pero tiro ya de memoria
Excelentes tutos, muy buen template para el sitio. Me gusta mucho leerlo. Pero por favor cambia tu codificación charset para evitar mostrar esto en el código:
i<
Puede ser solo en el plugin de código que usas.
Gracias por el aporte , a veces el plugin me da un error, acabo de corregirlo en el artículo.