Observando cambios de archivos y directorios en Java

Estoy escribiendo aquí principalmente para obtener consejos sobre dónde comenzar. Ya he implementado una clase que observará recursivamente un directorio utilizando WatchService de Java. Funciona bastante bien para detectar cambios, pero he notado una falla fatal: no puedo eliminar los directorios que se están viendo que contienen directorios que se están viendo. Esto parece ser una limitación de WatchService.

También he examinado un poco el VFS FileListener de Apache, pero antes de pasar otras 6 horas de mi tiempo construyendo algún tipo de envoltura alrededor, pensé que tal vez solo pediría a los que tienen más conocimiento que yo.

Necesito que los directorios que se están viendo sean completamente manipulables, con la excepción de que el directorio raíz que se está viendo no se eliminará ni cambiará de nombre. ¿Existe ya una buena clase con la que puedo trabajar para monitorear archivos y directorios que no bloquean archivos o carpetas? Estoy tratando de evitar un enfoque de comparación de sondeo / hash, pero siento cada vez más que necesitaré usar ese enfoque y quemar una tonelada de recursos de la CPU. ¿Por dónde empiezo con esto? Idealmente, necesito:

-Detectar creación de archivos y directorios -Detectar eliminación de archivos y directorios -Detectar cambio de nombre de archivos y directorios -Detectar modificación de archivos -Detectar movimiento de archivos entre directorios

También he visto que algunos sugieren que los observadores no son confiables y que usan una combinación de los dos (sondear ocasionalmente en caso de que el observador falle en alguna parte), pero parece un verdadero dolor que preferiría evitar si no es así La mejor manera de todos modos. Tengo la sensación de que necesitaré un sondeo y un hash, especialmente porque quiero detectar el movimiento y el cambio de nombre de los archivos, pero por favor indique si existen mejores opciones.

Gracias de antemano, y disculpe la pregunta que no es tan específica del código.

Respuestas a la pregunta(1)

Su respuesta a la pregunta