2011-07-07 95 views
3

我有一個java進程作爲守護進程工作,它監視文件系統上的directroy,一旦newy文件被添加到目錄中,java進程將通過執行一些邏輯來處理這個文件它目前在我的實現守護進程每10秒檢查一次文件夾,並在新文件被添加的情況下,它將開始處理它。使用Java的操作系統事件處理程序

有沒有辦法讓文件夾通知進程添加新文件,然後進程就可以開始工作了,類文件夾上的事件處理程序自身就是java API的操作系統級別,我可以在java中執行此操作嗎?

回答

2

我沒有辦法知道。無論如何,對於通知文件的文件夾,您可能需要更改(創建自己的)文件系統驅動程序。

系統事件非常依賴於操作系統,而Java被設計爲相反。

這取決於您希望守護進程響應的速度。使用睡眠方法,可以縮短睡眠時間,但會佔用更多的CPU週期。

1

如果您使用Java 7,請嘗試閱讀this。 有一個WatchService類可以處理你想要的。

+0

非常感謝您的快速回復。 – David

+0

不客氣=) – wleao

2

現在,您可以使用現有的實用程序,如jfilenotify,但它將作爲Java 7中的新功能之一。

您應該設計代碼,使通知機制與您的處理程序分離,從而使您可以輕鬆升級。

2

我認爲你遇到的一個問題是對同一個文件的併發訪問。如果它仍然被寫入,那麼你不能獨佔訪問該文件..並且沒有文件甚至沒有任何數據。您可能可以(ab)使用該事實來查看文件是否實際上已完成。

嘗試獲取該文件的排他鎖,如果失敗,則表示該文件沒有寫入。一旦它擁有獨佔鎖定,那麼該文件很可能已經完成,並且您可以隨意處理它。

看看java.nio.channels.FileLock,看看它是否適合你。 (http://download.oracle.com/javase/6/docs/api/java/nio/channels/FileLock.html

+0

+1有用的信息。在當前Java可用的所有文件觀察器實現中,存在併發訪問問題。 – Perception