2011-11-20 75 views
8

我想檢測一個文件或目錄是否已被刪除。顯然,我無法使用Files.isDirectory(Path)和文件的等價物,因爲文件/目錄已被刪除。WatchService /刪除/文件或目錄?

我想過使用兩個WatchService實例來觀察文件更改還是目錄更改,然後我知道所有的時間,如果它是一個文件或目錄。可悲的是我找不到合適的方法。

編輯:我認爲任何其他解決方案關於檢查文件名與目錄的字符串表示是容易出錯的。

+1

您是否嘗試[this](http://docs.oracle.com/javase/tutorial/essential/io/notification.html)? – home

+0

看不到這有什麼幫助(在使用WatchService之前閱讀過它),但也許我是盲目的? ;-) – Johannes

+0

嗯,也許我不明白你的問題嗎?您可以註冊該服務以在給定目錄處「偵聽」 - 這有什麼問題? – home

回答

2

在您正在觀看的目錄中保留元數據的本地副本 - 從簡單的條目列表,以及每個條目是否是文件或目錄,以及您刪除後可能感興趣的任何其他屬性 - 例如,大小或上次修改時間。一旦收到刪除通知,您就可以查閱這些元數據。

當您開始觀察循環時,您可以填充此元數據存儲 - 並使用ENTRY_CREATE和ENTRY_MODIFY擴展您的觀察器,以使您的元數據存儲保持最新,同時在監視目錄時進行其他更改。當然,這不會沒有額外的內存開銷來保存這些數據,但對於大多數使用情況來說,它應該是微不足道的。

+0

好主意,但它似乎比我提出的解決方案更具開銷。那麼,我想不出另一種解決方案。 – Johannes