2008-09-26 41 views
3

我正在研究一個小型Java應用程序(Java 1.6,Solaris),它將使用多個後臺線程監視一系列匹配特定正則表達式模式的輸出行的文本文件,然後使用的線。每個文件我有一個線程;他們將感興趣的線條寫入隊列中,另一個後臺線程只是簡單地監視隊列以收集整個被監視文件集合中的所有感興趣的線段。檢測正在重新打開文件的文件

我遇到的一個問題是當我正在監視的文件之一重新打開時。創建我監視的文件的許多應用程序將在重新啓動時簡單地重新啓動它們的日誌文件;他們不會附加到已經存在的內容上。

我需要我的Java應用程序來檢測文件已重新打開並重新啓動後面的文件。

我該如何做到最好?

回答

-1

您可以在文件系統上的某處指明您正在讀取給定文件。假設在正在讀取的文件旁邊(a.txt),您在它旁邊創建一個文件(a.txt.lock),表明正在讀取一個.txt文件。當你的過程完成後,a.txt.lock被刪除。每當進程打開文件讀取它時,它都會事先檢查鎖定文件。如果沒有鎖定文件,則不使用它。我希望這是有道理的,並回答你的問題。乾杯!

+0

ps,這通常由程序用來確定另一個實例是否正在運行 – 2008-09-26 07:07:43

1

你能記錄每個文件的長度嗎?噹噹前長度隨後回到零或小於上次記錄長度時,您知道該文件已被應用程序重新啓動?

1

使用lockfile是侏羅紀提到的解決方案。

另一種方法是在閱讀模式時嘗試打開文件,並查找文件是否具有新的大小並創建時間。如果創建時間與您找到它的時間不同,那麼您可以確定它已被重新創建。