2012-01-10 13 views
8

El uso de JDK 7 He tenido éxito en la observación de directorios específicos para la creación de archivos nuevos, supresiones y modificaciones utilizando java.nio.file.StandardWatchEventKinds. *Detectar los archivos recién creados pesar de Java en tiempo real

Estoy esperando que alguien puede conocer una forma de hacer que Java detecte nuevas creaciones de archivos, independientemente de su ruta.

Quiero hacer esto para poder calcular una suma de MD5 por cada archivo recién escrito.

Gracias por cualquier consejo que pueda ofrecer.

+0

¿Definir "independientemente de su ruta"? Un sistema de archivos? Cualquier montaje escribible? Además, ¿qué sistema operativo? (La respuesta breve es "No", pero puede haber una advertencia según el SO) –

+0

Simplemente Windows 7/NTFS por ahora. Me gustaría monitorear todos los volúmenes montados. Estoy probando JNotify como una posible solución. Gracias – JonnyKash

Respuesta

0

Bien, la respuesta corta es que no creo que Java pueda hacerlo de la caja. Tendría que interceptar llamadas al sistema operativo, lo que requeriría algo más cercano al bare metal, o podría hacer lo sugerido en another answer y registrar escuchas en cada carpeta desde la raíz hacia abajo, sin mencionar otras unidades en el caso de máquinas de ventanas.

El primer enfoque necesitaría JNI personalizado, lo que supone que el sistema operativo tiene tal enlace y permite el acceso de código de usuario.

El segundo enfoque funcionaría pero podría consumir una gran cantidad de memoria para rastrear a todos los oyentes. En Windows, haga clic derecho en c: \ y seleccione y vea cuántas carpetas estamos hablando.

+0

Gracias. Descubrí que la biblioteca [JNotify] (http://jnotify.sourceforge.net/) funciona perfectamente para esto. – JonnyKash

0

Una posibilidad, aunque no es conveniente, pero es una posibilidad, es recorrer el árbol de directorios para los directorios que desea ver, registrándolos en un WatchService. Esa no es una forma muy buena de hacerlo, y podría ser un problema dependiendo de qué tan grande sea el árbol de directorios.

0

No sé StandardWatchEvents (aunque suena conveniente).

Una forma de hacer lo que desee es usar una API de ventana nativa como ReadDirectoryChangesW (o cambios de volumen). Es doloroso, pero funciona (estuve allí, lo hice, ojalá tuviera otra opción en ese momento).

Cuestiones relacionadas