2011-10-13 55 views
1

我最近實現了Java 7的WatchService,它的工作原理非常完美。現在我想知道是否有辦法讓我的程序上次運行後發生的所有事件。例如:java未運行時的Java監視器文件系統

  1. 我跑我的程序,創建一些文件,編輯一些文件和我得到的所有相應的活動
  2. 我閉上程序
  3. 我創建一個文件名爲foo.txt
  4. 我開始我的程序,第一個事件我得到的是一個ENTRY_CREATEfoo.txt

我想過節省lastModifiedDate和搜索文件和directorys不止t更新他上次執行我的程序。是否有另一種(更好的)方法來做到這一點?

回答

2

如果您的程序旨在掃描全部文件更改(除了在內容/源代碼控制存儲庫中存儲文件,但在您的程序外部),沒有更好的方法來執行此操作。

Java 7的WatchService只是比持續循環和比較文件日期/文件夾內容更高效的方式,因此您需要實現自己的邏輯來解決自己的問題。

1

在Java或任何其他編程語言中無法做到這一點。

操作系統沒有(也不能)緩衝文件系統事件,因爲有人可能會啓動某個程序來處理它們。事件監視器/傳送系統捕獲正在監聽它們的正在運行的應用程序的事件。當沒有人在聽時,事件不會被捕獲。

+0

是的,這很明顯,而不是我的問題,我希望Java有一個解決方法實施的地方(如lastmodifiedDate解決方案或什麼的) – Simiil

0

您可以編寫一個連續運行並監聽文件系統更改的小守護程序(Windows上的系統服務)。它可以將這些寫入文件。當您的應用程序運行時,而不是自己監聽更改,它可能只是讀取文件。當事件發生時,守護進程將繼續接收它們,並通過文件將它們發送給應用程序。

您需要確保文件的組織方式可以同時安全地寫入和讀取,並且文件不會無限增長。