2011-04-22 165 views
3

我有一個程序監視日誌文件的變化。該程序使用FileInputStream來繼續讀取文件。同時,日誌文件可能會被旋轉:舊的日誌文件被重命名並且新的日誌條目被寫入到一個新文件中。如何判斷文件是否被重命名?

我的程序如何確定文件被重命名,以便它切換到新的日誌文件?

+1

除非您正在監視文件系統中的更改事件,否則實際上不能。你正在開發什麼文件系統/平臺? – 2011-04-22 09:04:41

+0

將重命名成功,如果文件打開並積極讀取? – Bozho 2011-04-22 09:06:56

+0

可能的重複[是否有一個複雜的文件系統監視器的Java是免費的或開源的?](http://stackoverflow.com/questions/1096404/is-there-a-sophisticated-file-system-monitor-for -java-which-free-or-open-s) – krock 2011-04-22 09:22:49

回答

5

根據this question,JNotify sseems是你的問題的完美解決方案:

JNotify是一個Java庫,允許Java應用程序偵聽文件系統事件,如:

文件創建

文件修改

文件改名

文件已刪除

0

也許你可以watch文件系統,並根據你的需要進行更改。

+2

是的,但只有當他是使用Java 7. java.nio.file包在Java 6或更早版本中不存在。 – darioo 2011-04-22 09:10:22

+1

實際上有java.nio.file的backports,像這個問題(http://stackoverflow.com/q/1096404/15619)回答提到 – Riduidel 2011-04-22 09:17:49

0

我能想到的最簡單的方法就是每5秒輪詢文件大小或類似的東西。

如果您正在閱讀的文件已重命名並創建了新文件,那麼您的輪詢將顯示大小突然減小。然後,您可以相應地重新創建FileinputStream。

+0

JNotify和java.nio.file聽起來不錯,但對於我的情況輪詢文件大小更簡單。 – aleung 2011-05-10 14:26:43

+0

最後我們切換到JNotify。這比輪詢文件大小更可靠。如果舊文件爲空,則無法通過比較大小來檢測文件旋轉。 – aleung 2011-12-26 04:12:50

相關問題