2010-07-29 12 views
6

Duplicar posible:
How do I find the last modified file in a directory in Java?¿Cómo obtener el archivo con la última fecha lastModified, en Java?

que tiene un directorio de archivos que necesito para ver si hay cambios. Considero que ha cambiado cuando uno de los archivos tiene un modifiedDate más nuevo de lo que recordaba de la última verificación (esto es una dependencia de la caché).

¿Cuál sería la forma más rápida de encontrar el último archivo modificado en un directorio en Java?


Quizás soy demasiado optimista, pero explícitamente estoy buscando algo que no implique iterar todos los archivos.

Además, verificar la fecha de modificación del directorio no es suficiente, ya que esto solo cambia cuando cambia la lista de los archivos, no cuando uno de los archivos se acaba de modificar.

+0

¿Es el código Java el único que modifica esos archivos? (No lo creo, pero por las dudas ...) –

+0

@Pablo Fernandez: No, son los usuarios que ponen cosas nuevas ahí. – Tomalak

+0

Mmm ... tal vez haya una solución alternativa con IO con evented. Lamentablemente, no soy un experto en eso, pero espero que esto le dé una pista a cualquiera que sea :). ¡Buena suerte! –

Respuesta

2

Incluso si no desea iterar todos los archivos, cualquier API de terceros que utilice para buscar esto repetirá todos los archivos.

JDK 7 está destinado a tener java.nio.WatchService, que aparentemente repetirá todo si es necesario, pero utilizará el soporte del sistema de archivos para hacer exactamente lo que usted solicitó. En el lado negativo, that's still in the future.

+0

Ya lo pensé. Supongo que esto es lo que terminaré haciendo. – Tomalak

+0

En realidad, el futuro tiene algo brillante. Déjame editar mi respuesta. –

+0

Gracias por la edición. :-) PD: Algo así es factible en .NET ya (a través de 'System.IO.FileSystemWatcher'). – Tomalak

1

Debe iterar todos los nombres de archivo y extraer la fecha de modificación.

0

Creo que eso no es posible. Puede utilizar una clase en tiempo de ejecución a exec una línea de comandos UNIX de java "ls -lrt | cola -1" y analizar la cadena para obtener el nombre del último archivo modificado

+0

Me refiero no es posible sin caminar por todos los objetos de archivo en el directorio –

+0

Si tiene varios miles de archivos (y probablemente algún día los tenga) esto no es una buena idea. – darpet

1

Ver esta solución: How to get only 10 last modified files from directory using Java?

Se es código Java puro pero con un truco simple para mejorar el rendimiento.

+0

No estoy seguro si entiendo bien esta solución: las operaciones básicas son "obtener cada archivo, ver su fecha". Estos no son más rápidos que en un ciclo pasado de moda. ¿Entonces la mejora de velocidad proviene de hacer la clasificación sobre la marcha? – Tomalak

+0

Tienes razón. No es más rápido que un bucle, pero solo hay un bucle. Cualquier otra solución portátil (java pura, sin escaparse a comandos específicos del SO, etc.) necesitaría 1 ciclo para obtener todos los archivos y luego otro ciclo sobre los archivos para obtener el último modificado. Éste está guardando ese segundo ciclo al poner esa lógica en el primer bucle. – rahulmohan

+0

Gracias por aclarar. :) Sin embargo, para ser completamente honesto: esta solución en particular estaba destinada a ser utilizada en el contexto ColdFusion, que se ejecuta sobre Java. Puede operar objetos Java en ColdFusion, pero es imposible implementar interfaces u otras cosas avanzadas. Prefiero no escribir mi propia clase de Java para este problema, así que lo dejé en "do two loops". Es lo suficientemente bueno por ahora. * PD: use @ respuestas en los comentarios o sus respuestas podrían pasar desapercibidas. (Solo los comentarios en la publicación de alguien, como yo, al comentar tu respuesta, no necesitan una respuesta @). * – Tomalak

Cuestiones relacionadas