2009-07-21 17 views
7

Necesito saber cuándo aparece un nuevo archivo en un directorio. Obviamente, podría sondear el sistema de archivos periódicamente, pero eso tiene todas las desventajas normales de los mecanismos de votación.¿Cómo puedo recibir eventos del sistema de archivos de Windows en Java?

Sé que windows supports file system events, y este proyecto ya está restringido a la plataforma de Windows por otros requisitos.

¿Alguien tiene experiencia en recibir eventos del sistema de archivos de Windows dentro de una JVM? Si es así, ¿cuáles son las mejores prácticas, patrones y/o bibliotecas que ha utilizado?

Un rápido google aparece this library. ¿Alguien tiene experiencia con eso (o cualquier otro) que estén dispuestos a compartir?

+0

esta pregunta ha duplicado al menos 2 de desbordamiento de pila – dfa

+0

posible DUP de http://stackoverflow.com/questions/730186/suggestions-sample-code-for-filesystemwatcher-in-java/732418 – notnoop

+0

otra posible DUP: http : //stackoverflow.com/questions/1096404 – dfa

Respuesta

7

Creo que esta es una de las características clave de Java 7 cuando está más disponible. Código de ejemplo de Sun blog on Java 7:

import static java.nio.file.StandardWatchEventKind. *;

Path dir = ...; 
try { 
    WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); 
} catch (IOException x) { 
    System.err.println(x); 
} 
+0

Bien, no sabía eso. – Draemon

+0

Si esto es para el código de producción, Java 7 no se debe utilizar. No es lanzado. –

1

Algo de bajo nivel y específico del sistema operativo como ese va a necesitar código nativo (según el enlace que mencionas). Esa biblioteca parece relativamente pequeña, por lo que en el peor de los casos, es probable que pueda solucionar cualquier problema si su C++ es lo suficientemente bueno.

Sin embargo, si puede evitarlo, le sugiero que no use código nativo - biblioteca o no. ¿Qué es tan exigente acerca de su escenario que no puede tener una encuesta de hilos de fondo?

0

Si no utiliza Jdk7, tendrá que usar JNI.

2

Para Java 6 o versiones anteriores, use JNA's com.sun.jna.platform.win32.FileMonitor.

1

Puede utilizar código abierto marco JPollar para sondear el directorio en intervalos de tiempo. También permite un sondeo basado en el tiempo.

+0

Sería genial si proporciona un enlace para completar la respuesta – voromax

Cuestiones relacionadas