2011-06-11 26 views
7

Acabo de ver una característica impresionante con java 7, el observador del directorio. Te dirá cuándo cambió algo en un directorio sin sondear el directorio.java 7 preguntas de supervisión del directorio

1.) Pero dice que recae en el sondeo si el sistema de archivos no admite registrarse para eventos de cambio. ¿Todos los sistemas de archivos típicos de Linux y Windows (extX, ntfs, reiserXXX, jsf, zfs) son compatibles con esta característica?

2.) ¿Cambiar el nombre de un archivo dentro de un directorio es un evento de creación o cambio? ¿O es eso una eliminación y una creación? Puedo probarlo en un sistema, pero ¿será el mismo para todos los sistemas de archivos?

Respuesta

2

Parece que estás hablando del WatchService.

La redacción del evento ENTRY_CREATE dice que se percibiría una nueva entrada si se crea un nuevo archivo o si se cambia el nombre de un archivo al directorio. Carece de especificación de qué eventos se disparan si se renombra un archivo y permanece en el mismo directorio.

La redacción también establece que si el servicio se basa en el sistema operativo o el sondeo depende de la implementación. Sospecho que es una implementación de JRE, por lo que incluso si sabes que un sistema operativo en particular lo admite, no es una garantía de que el servicio utilizará la funcionalidad de nivel de sistema operativo o recurrirá a la votación. De hecho, el servicio no proporciona ninguna forma de saber si está utilizando un sondeo o una función de nivel de sistema operativo.

Las operaciones que define la API tampoco se comportan como un Oyente. El WatchService no hace la observación automática, pero para adquirir la lista de eventos que suceden, usted todavía tiene que solicitar manualmente los eventos vistos desde el servicio. No parece proporcionar ningún gancho para llamar automáticamente cuando hay un nuevo evento presente.

+0

bien, pero creo que el JRE que puede descargar desde Oracle abrirá el camino para Windows y Linux. Eso es todo por lo que estoy realmente interesado. Pero aún así, el sistema operativo y el sistema de archivos deben tener algunas características antes de que esto funcione. ¿Alguna idea de quién maneja el oráculo? –

+1

[inotify] (http://en.wikipedia.org/wiki/Inotify) es una herramienta de Linux que genera notificación cuando cambia un archivo. Windows también tiene un servicio como este: [FindFirstChangeNotification] (http://msdn.microsoft.com/en-us/library/aa364417%28VS.85%29.aspx) está disponible en .NET. No sé cómo lo maneja el oráculo, pero me imagino que redirecciona a uno de esos a través de jni si están disponibles. – Atreys

1

Si juegas con él en Windows y en Linux, verás muchas diferencias de comportamiento. Por lo tanto, Java realmente no intenta proporcionar una abstracción independiente de plataforma consistente. Tienes que probar tu aplicación en los sistemas operativos que te interesan (bueno, solo hay 2).

WatchService chupa más de lo que imagina. Prepárate para las frustraciones si realmente te sumerges en él.

+0

De acuerdo lo tendré en cuenta. Parece tan eficiente no tener que sondear los directorios todo el tiempo. Esperaban años para tal característica, en 17 días está allí. Y ahora es una mierda!?! Espero que no sea una mierda muy difícil :-) –

+1

ok, te he asustado demasiado. es más complicado de lo que uno pensaría inicialmente. – irreputable

Cuestiones relacionadas