Java 7 WatchService - Ignorowanie wielu wystąpień tego samego zdarzenia

Javadoc dlaStandardWatchEventKinds.ENTRY_MODIFY mówi:

Zmodyfikowano wpis katalogu. Gdy katalog jest zarejestrowany dla tego zdarzenia, wówczas WatchKey jest ustawiany w kolejce, gdy zauważono, że wpis w katalogu został zmodyfikowany. Liczba zdarzeń dla tego wydarzenia wynosi 1 lub więcej.

Podczas edycji zawartości pliku za pomocą edytora zmodyfikuje zarówno datę (lub inne metadane), jak i treść. Otrzymujesz dwaENTRY_MODIFY wydarzenia, ale każdy będzie miałcount z 1 (przynajmniej tak widzę).

Próbuję monitorować plik konfiguracyjny (servers.cfg wcześniej zarejestrowany wWatchService), który jest ręcznie aktualizowany (np. przez wiersz poleceńvi) z następującym kodem:

while(true) {
    watchKey = watchService.take(); // blocks

    for (WatchEvent<?> event : watchKey.pollEvents()) {
        WatchEvent<Path> watchEvent = (WatchEvent<Path>) event;
        WatchEvent.Kind<Path> kind = watchEvent.kind();

        System.out.println(watchEvent.context() + ", count: "+ watchEvent.count() + ", event: "+ watchEvent.kind());
        // prints (loop on the while twice)
        // servers.cfg, count: 1, event: ENTRY_MODIFY
        // servers.cfg, count: 1, event: ENTRY_MODIFY

        switch(kind.name()) {
            case "ENTRY_MODIFY":
                handleModify(watchEvent.context()); // reload configuration class
                break;
            case "ENTRY_DELETE":
                handleDelete(watchEvent.context()); // do something else
                break;              
        }
    }   

    watchKey.reset();       
}

Od kiedy masz dwaENTRY_MODIFY zdarzenia, powyższe przeładowałoby konfigurację dwukrotnie, gdy tylko jeden raz jest potrzebny. Czy jest jakiś sposób na zignorowanie wszystkich oprócz jednego, zakładając, że może istnieć więcej niż jedno takie zdarzenie?

JeśliWatchService API ma takie narzędzie tym lepiej. (W pewnym sensie nie chcę sprawdzać czasów między poszczególnymi zdarzeniami. Wszystkie metody obsługi w moim kodzie są synchroniczne.

To samo dotyczy tworzenia (kopiowania / wklejania) pliku z jednego katalogu do katalogu obserwowanego. Jak połączyć oba te wydarzenia w jedno?

questionAnswers(13)

yourAnswerToTheQuestion