2009-12-21 18 views
0

我正在創建我的項目,在該項目中將我的PC的所有文件編入數據庫中。 現在我想知道在運行時文件是否被刪除,移動或重命名爲 ,以便我可以更新數據庫而不必重新編制索引。我們可以在運行時確定文件是否從硬盤上刪除或不使用java

+1

你不需要大膽的文字。它只是讓它成爲閱讀的眼睛疲勞。 – 2009-12-21 00:38:22

+0

你想讓它運行的任何特定操作系統? – TofuBeer 2009-12-21 01:00:37

回答

1

直到JDK 7惡有惡報,有沒有在java中的非原生機制來檢測文件相關的事件(包括刪除)。也就是說,即使您能夠檢測到文件刪除,您仍然需要一些算法來在應用程序啓動時使索引同步。

當我們做這樣的事情,我們一般拍攝在索引(我們使用JDBM B樹)的路徑+修改日期+文件的長度。然後重新索引是同時迭代文件夾樹和索引的問題。當您在索引中找到不在文件夾樹中的條目時,將其從索引中刪除。在文件夾樹中找到不在索引中的條目時,將其添加到索引中。如果您找到兩個條目,請檢查修改後的日期和大小。

因此,除非我們有jdk7,否則基本上停留在基於輪詢的解決方案(即每隔XX秒更新一次索引)。

注意JDK7(除了文件夾監視)將在迭代文件提供巨大的性能提升(目前基於文件的操作都是很慢相比,你可以原生要做什麼)。

+0

我將等待jdk 7 – 2010-02-03 21:54:04

3

如果你想知道,你已經知道存在一個特定的文件是否已不存在,你可以只使用File.exists()。有目錄觀察程序包會在文件添加/刪除/移動時觸發事件,但在文件系統中的每個目錄上運行目錄觀察程序線程聽起來效率非常低。

1

我認爲java 7可能有你正在尋找的東西,一旦它是發佈。請參閱以下link

相關問題