簡體   English   中英

Java7 WatchService-如何檢測實際監視目錄的重命名/移動

[英]Java7 WatchService - How to detect rename/move of the actual watched directory

我正在使用WatchService與應用程序工作台同步數據文件。 當我重命名/移動監視目錄時,我沒有任何事件,WatchKey也不會失效。 我仍然從重命名的目錄中獲取事件,但是據我所知,除了WatchKey.watchable()之外,沒有辦法找到WatchKey的實際路徑,但是它仍然返回原始目錄路徑。 我想避免鎖定鎖定的目錄以防止更改,因為我想使應用程序盡可能輕便。

我在Windows 7上遇到了JDK 7u10的問題

您是否知道此問題的任何解決方法,而無需鎖定目錄或查看所有目錄的根目錄?

更新

在Linux上,我觀察到相同的行為。

到目前為止,看來我現在有三個選擇。

1)根據用戶的紀律,他/她將不移動數據目錄。 我不太喜歡這個選項,因為它可能導致未定義的行為。

2)使用更廣泛的非標准本機庫

3)在上級目錄上創建看門狗的層次結構。 它們將僅接受ENTRY_DELETE事件,因為此事件(或OVERFLOW )必須在實際監視的目錄被移動或刪除並因此無效的時刻出現。

我的理解是,重命名目錄將在舊父目錄和新父目錄上生成文件系統事件,而不是在重命名目錄上生成文件系統事件。 根據對iNotify的回答, 可以告訴我受監視文件的位置嗎? ,除非您正在監視目標目錄,否則操作系統無法告訴您將內容移至何處。 (此外,在Java 7/8中,監視服務實現不處理事件。)

更新

您可以嘗試使用標准Java7 WatchService API添加對( 特定平台的 )擴展事件的支持的jpathwatch項目。

參考文獻:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM