Estoy buscando una manera eficiente para repetir miles de archivos en uno o más directorios.forma eficiente de iterar sobre la lista de archivos
La única manera de iterar sobre los archivos en un directorio parece ser File.list*()
funciones. Estas funciones cargan efectivamente toda la lista de archivos en algún tipo de colección y luego permiten que el usuario itere sobre ella. Esto parece ser poco práctico en términos de consumo de tiempo/memoria. Traté de mirar commons-io y otras herramientas similares. pero todos finalmente llaman al File.list*()
en algún lugar dentro. JDK7's walkFileTree()
estuvo cerca, pero no tengo control sobre cuándo elegir el siguiente elemento.
Tengo más de 150.000 archivos en un directorio y después de muchos -Xms/ejecuciones de prueba -Xmm que se deshizo de los problemas de desbordamiento de memoria. Pero el tiempo que toma llenar el conjunto no ha cambiado.
deseo de hacer algún tipo de una clase que utiliza Iterable opendir()/closedir() como funciones para cargar con pereza nombres de archivo según sea necesario. ¿Hay alguna forma de hacer esto?
Actualización:
Java 7 NIO.2 apoya iteración de archivos a través java.nio.file.DirectoryStream. Es una clase Iterable. En cuanto a JDK6 y siguientes, la única opción son los métodos File.list*()
.
No sé si existe una solución estándar para eso. Supongo que no hay otra manera de hacerlo, pero impleméntelo solo en C y acceda a él a través de JNI ... –
Las respuestas en esta pregunta pueden ser útiles: http://stackoverflow.com/questions/1034977/how- para-recuperar-una-lista-de-directorios-rápidamente-en-java – charlemagne
Sospecho que el verdadero problema aquí es que usted tiene un solo directorio con 150K archivos. Ciertamente no me gustaría poner a prueba un sistema de archivos de esa manera. ¿No puedes usar subdirectorios, quizás agrupar archivos por los dos primeros caracteres en el nombre del archivo o algo así? –