¿Cómo calculo el número de archivos en un directorio utilizando Java? Para simplificar, supongamos que el directorio no tiene ningún subdirectorio.Contar el número de archivos en un directorio utilizando Java
Sé que el método estándar de:
new File(<directory path>).listFiles().length
pero esto va a ir con eficacia a través de todos los archivos en el directorio, lo que puede tardar mucho tiempo si el número de archivos es grande. Además, no me importan los archivos reales en el directorio a menos que su número sea mayor que un número grande fijo (digamos 5000).
estoy adivinando, pero no el directorio (o su i-nodo en caso de Unix) almacenar el número de archivos contenidos en ella? Si pudiera obtener ese número directamente del sistema de archivos, sería mucho más rápido. Necesito hacer esta comprobación para cada solicitud HTTP en un servidor Tomcat antes de que el back-end comience a hacer el procesamiento real. Por lo tanto, la velocidad es de suma importancia.
que podría ejecutar un demonio de vez en cuando para limpiar el directorio. Lo sé, así que por favor no me des esa solución.
Si el directorio tiene potencialmente una gran cantidad de archivos (1000s +), es posible que desee evitar asignar la matriz devuelta por los métodos de la lista de archivos. No he intentado esto todavía, pero tal vez podría usar listFiles y pasarle una instancia de FileFilter que hace el conteo de los archivos en el método accept, mientras que al mismo tiempo devuelve false para todos los archivos. Supongo que esto evita la asignación de la matriz, al tiempo que le da un recuento de archivos. –
Ignore mi último comentario ... Dependiendo de la impl JDK, la matriz se puede asignar de todos modos (debajo del capó).Ese parece ser el caso en openjdk de todos modos. –
Para Java 7 y versiones posteriores, este problema tiene una buena solución con una API Java estándar. Consulte la respuesta de @ mateuscb a continuación - http://stackoverflow.com/questions/687444/counting-the-number-of-files-in-a-directory-using-java/30784016#30784016. –