我有一個觀察者,當更改被聽到時更新我的數據結構。但是,如果更改不是即時的(即,如果正在從另一個文件系統複製大文件,或者修改了大部分文件),數據結構會嘗試更新得太早並引發錯誤。Java觀察服務 - 等待修改完成
如何修改我的代碼,以便updateData()
之後僅最後ENTRY_MODIFY
稱爲被調用,而不是每一個ENTRY_MODIFY
後。
private static boolean processWatcherEvents() {
WatchKey key;
try {
key = watcher.poll(10, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
return false;
}
Path directory = keys.get(key);
if (directory == null) {
return false;
}
for (WatchEvent <?> event : key.pollEvents()) {
WatchEvent.Kind eventKind = event.kind();
WatchEvent <Path> watchEvent = (WatchEvent<Path>)event;
Path child = directory.resolve(watchEvent.context());
if (eventKind == StandardWatchEventKinds.ENTRY_MODIFY) {
//TODO: Wait until modifications are "finished" before taking these actions.
if (Files.isDirectory(child)) {
updateData(child);
}
}
boolean valid = key.reset();
if (!valid) {
keys.remove(key);
}
}
return true;
}
你試過分配的孩子一個varialbe,循環結束後,執行updateDate?或者我在這裏錯過了這個想法? – Beri
我認爲我給出的答案[這裏](http://stackoverflow.com/a/34718685/243373)可能是你需要的,至少是輪廓。 –
是我給任何用途的鏈接的答案? –