Observando Alterações de Arquivos e Diretórios em Java

Estou escrevendo aqui principalmente para obter conselhos sobre por onde começar. Eu já implementei uma classe que observará recursivamente um diretório usando o WatchService do Java. Ele funciona bem para detectar alterações, mas notei uma falha fatal: não consigo excluir diretórios que estão sendo monitorados que contêm diretórios que estão sendo monitorados. Isso parece ser uma limitação do WatchService.

Também examinei um pouco o VFS FileListener do Apache, mas antes de passar mais ou menos seis horas construindo algum tipo de invólucro em torno dele, imaginei que talvez eu perguntasse a quem tem mais conhecimento.

Eu preciso que os diretórios que estão sendo monitorados sejam totalmente manipuláveis, com a exceção de que o diretório raiz que está sendo monitorado não será excluído ou renomeado. Já existe uma boa classe com a qual eu possa trabalhar para monitorar arquivos e diretórios que não bloqueiam arquivos ou pastas? Estou tentando evitar uma abordagem de comparação de polling / hash, mas sinto cada vez mais como se precisasse usar essa abordagem e gravar uma tonelada de recursos da CPU. Por onde começo com isso? Idealmente, eu preciso:

- Detecção de criação de arquivos e diretórios - Detecção de exclusão de arquivos e diretórios - Detecção de renomeação de arquivos e diretórios - Detecção de modificação de arquivos - Detecção de movimentação de arquivos entre diretórios

Também vi alguns sugerir que os observadores não são confiáveis e que usam uma combinação dos dois (sondagens ocasionalmente, caso o observador falhe em algum lugar), mas cara isso soa como uma dor real que eu prefiro evitar se não for da melhor maneira. Tenho a sensação de que precisarei de sondagem e hash, principalmente porque quero detectar a movimentação e renomeação de arquivos, mas informe se existem melhores opções.

Agradecemos antecipadamente e desculpe-me pela pergunta não tão específica do código!