2012-09-10 50 views
2

我使用nio.2類的Watch Service API來觀察特定的目錄(Ubuntu 11.10)。無論何時進行更改,例如,如果我在現有文件中進行修改,則會發生2次修改事件。不知道爲什麼?當我創建新文件時它工作正常。獲取修改文件中更改的事件?

回答

3

我爲它找到一個解決方案。它觸發兩個修改事件,因爲當文件系統寫入新文件時,它會用零字節創建它並觸發創建事件,然後將數據寫入和文件,然後觸發修改事件。

這同樣適用於修改。當我們修改一個已經存在的文件時,文件系統首先用0字節創建它,然後觸發一個修改事件,然後將數據寫入它。然後它再次觸發修改事件。這就是我收到兩個修改事件的原因。

1

我已經使用了Oracle的example,奇怪的是它有時會觸發ENTRY_MODIFY,有時會觸發一次。我正在使用Windows機器。

在文檔有關於可能的重複事件沒有資料,所以我想這或者是一個無證的行爲或錯誤。

+1

謝謝答覆,我得到了解決方案。這不是因爲錯誤。當我們編寫或編輯文件。 OS FileSystem首先用0字節創建一個文件,然後對其進行更改。這就是爲什麼我們收到兩個修改事件。同樣,當我們創建一個新文件(使用某些數據或粘貼某個文件時),它會首先觸發兩個事件,第二個觸發器用於修改。 –

+0

考慮以下情形: 1)我打開文件進行修改。 2)我改變它並保存。 3)有時我有兩個事件,有時只有一個。 爲什麼它的行爲不同呢? –

+0

我每次修改文件時都收到2個事件。根據我的知識,當你修改你的文件時應該通知你兩次。不知道爲什麼你有一次通知 - 由於操作系統的差異。 –