コードの一部が変更、作成、または削除されるたびに特定のアクションを実行する監視サービスを開発しようとしています。
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 で変更が検出されました