簡體   English   中英

如何檢測文件是否已重命名?

[英]How to detect if a file has been renamed?

我目前正在用Java實現自己的WatchService API版本

(您可以參考此示例以了解WatchService的作用。)

我已經以下情況實現了代碼

  • 每當在目錄或其子目錄中創建文件時
  • 每當從目錄或其子目錄中刪除文件時
  • 只要在目錄或其子目錄中修改文件 (基於文件的最后修改日期的比較)

我遇到一個問題,無論何時重命名文件,我都不知道如何跟蹤它。

此鏈接包含我的代碼的概要: 單擊此處

每當文件被重命名時,我都會得到2條結果

刪除的文件: {舊文件名}
添加的文件: {新文件名}

但是我想要的實際結果是:

文件重命名:{舊文件名}{新文件名}

我該如何應對這一挑戰?

我提供了一個偽代碼(我認為足以理解當前的問題),如果需要,我也可以提供整個代碼:)

您可以為每個文件存儲哈希。 當您檢測到某些文件被刪除而一些添加的比較哈希,如果它們匹配,您會發現已重命名/移動的文件。

每當重命名文件時,觀察程序服務都會生成delete + create事件。 您應該了解如何將這兩個事件合並為重命名事件。

您可以創建一個唯一的ID並將其分配給文件。 請參考此鏈接 每當您在文件上看到一個create事件並且它已經有一些ID時,即表示它已被重命名,否則它是新創建的。 對於新創建的文件,應設置隨機唯一ID以跟蹤重命名事件。

JNotify支持JNotify.FILE_RENAMED事件。 據我了解,這是本機inotify API的包裝,它可以在系統級別捕獲文件重命名(更改名稱而不更改文件描述符)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM