2010-04-27 35 views
3

我有一個應用程序,我需要檢查可能在我的執行過程中動態創建的文件,在文件尚未顯示的MAX時間後,我會放棄。我想知道是否有更有效的方法在Java中檢查除輪詢之外的文件,然後每隔X秒鐘進行一次睡眠?如果不是這樣做最有效的方式是什麼?如何在Java中檢查動態創建的文件?

回答

3

您當前必須輪詢文件系統,如您所述。 Java 7應該有file system notifications,所以這應該在某些時候變得更容易。

+0

這很酷。不能等。 – 2010-04-27 21:34:54

1

如果同一個程序正在創建文件作爲輪詢,則可以改爲創建文件的邏輯使用Object.notify()通知程序的一部分。 wait()和notify/notifyAll()機制的一般描述可以在這裏找到:http://java.sun.com/docs/books/tutorial/essential/concurrency/guardmeth.html

+0

這似乎是一個好主意,但不適用於我的情況,因爲該文件是在外部生成的。 – Traker 2010-04-27 21:09:09

0

您可以嘗試JPoller來輪詢文件更改。

如果您在Windows上運行,則可以獲取目錄更改通知,請參閱Obtaining Directory Change Notifications。當然,這不是跨平臺的,並且需要使用JNA或類似的本地網橋。實際上,JNA的offsers如類,FileMonitor類(在下載中)使用底層平臺的文件更改通知。

如果你正在觀看一小部分或更少的文件,那麼當然,輪詢不太可能是一個性能問題,它只是不是一個「感覺良好」的解決方案 - 但並不是那麼糟糕,純java解決方案。另一方面,監視包含數千個文件的目錄將受益於來自操作系統的直接消息。