我正在嘗試開發一種監視服務,每次修改,創建或刪除一段代碼時,都會執行某種操作。監視文件更改Java
我製作了一個守護程序,它實現了WatchService,並獲取了要監視的某個包的路徑,例如「../JDV/src/randompackage/java/test/money_scenario」。
此守護進程具有下面的代碼:
public Daemon(Path dir) throws IOException{
this.dir = dir;
watcher = FileSystems.getDefault().newWatchService();
WatchKey key = dir.register(watcher, ENTRY_CREATE,ENTRY_DELETE,
ENTRY_MODIFY);
}
public void processEvents() throws InitializationError {
for (;;) {
// wait for key to be signaled
WatchKey key;
try {
key = watcher.take();
} catch (InterruptedException x) {
return;
}
for (WatchEvent<?> event: key.pollEvents()) {
WatchEvent.Kind kind = event.kind();
if (kind == OVERFLOW) {
continue;
}
if(kind == ENTRY_CREATE) {
System.out.println("Creation has been detected in " + getDirName());
}
if(kind == ENTRY_DELETE) {
System.out.println("Deletion has been detected in " + getDirName());
}
if(kind == ENTRY_MODIFY) {
System.out.println("Modification has been detected in " + getDirName());
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
}
會發生什麼事是這樣的:我運行守護進程,這是積極的。每當我去創建或刪除money_scenario包中的一個類(它本身有從我可以刪除/創建類的子包)時,守護程序檢測到它並打印「修改已被檢測到」,而不是創建/刪除。當我修改money_scenario包中的類時,它不檢測任何內容。
我在做什麼錯?
編輯:已解決但彈出另一個問題。多個事件: 當我刪除我得到例如一類:
變形具有money_scenario 被檢測缺失已money_scenario被檢測 變形具有money_scenario
由於原來如此! 現在我又遇到了另外一個問題,即多個事件被捕獲。 請參閱編輯中的說明。 – Sven
@Sven無法重新創建該錯誤,但您可以嘗試編輯,我認爲它應該不太容易出錯。可能if會多次觸發,因爲創建/刪除操作可能觸發修改事件(取決於操作系統)。 – maryokhin