我正在使用WatchService
來同步數據文件與應用程序工作臺。當我重命名/移動觀看的目錄時,我沒有收到任何事件,WatchKey也不會失效。我仍然從重命名的目錄中獲取事件,但據我所知,除了WatchKey.watchable()
之外,沒有辦法找到WatchKey的實際路徑,但仍然返回原始目錄路徑。我想避免需要鎖定監視的目錄以應對更改,因爲我想盡可能保持應用程序的輕量級。Java7 WatchService - 如何檢測實際觀看目錄的重命名/移動
我曾經歷過這個問題,JDK 7u10在Windows 7
你知道這個問題什麼解決辦法沒有鎖定的目錄或者看所有目錄的根?
UPDATE
在Linux上我觀察到相同的行爲。
到目前爲止,我似乎有三種選擇。
1)依靠用戶的紀律,他/她不會移動數據目錄。我不太喜歡這個選項,因爲它可能會導致未定義的行爲。
2)使用更廣泛的非標機庫
3)創建優越的目錄監管機構的層次。這些事件只接受ENTRY_DELETE
事件,因爲此事件(或OVERFLOW
)必須在實際觀看的目錄被移動或刪除並因此無效時出現。
的Javadoc指定,這裏使用的是本地可用的機制,你有沒有試過和搜索Win7的機制是如何起作用在這種情況下? – fge
Windows上的本地機制使用目錄句柄,當目錄被重命名/移動但發送了特定事件時,該目錄句柄未更改。這不會是一個問題,但在java中,我沒有看到任何方式來檢測這些窗口特定事件,也沒有任何方式來獲取和檢查實際的目錄句柄值。 – rjezek