Ubuntu Java watchservice 坏了
Ubuntu Java watchservice is broken
这是我使用监视器更改文件夹的代码:
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("/home/user/test/");
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
System.out.println("Begin monitor to test folder: ");
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();
// The filename is the
// context of the event.
@SuppressWarnings("unchecked")
WatchEvent<Path> ev = (WatchEvent<Path>)event;
Path filename = ev.context();
if (filename.toString().startsWith(".")) continue;
if (kind == OVERFLOW) {
continue;
} else if (kind == ENTRY_CREATE) {
System.out.println(kind.name() + ":" +filename);
} else if (kind == ENTRY_DELETE) {
System.out.println(kind.name() + ":" +filename);
} else if (kind == ENTRY_MODIFY) {
System.out.println(kind.name() + ":" +filename);
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
在windows上很好,Mac os,但是当运行在ubuntu 16.04上时,我要面对的问题是:
对于监视文件夹中的现有文件:当我编辑文件时,我收到创建事件,而我想获得修改事件
请帮帮我
谢谢
确保您在 Ubuntu 中用于编辑文件的程序不会创建隐藏文件。一些编辑器这样做是为了确保在程序崩溃时不会丢失任何更改。
因此,请确保您的编辑器在您编辑文件时不会创建隐藏文件,并且如果它确实使用其他程序或处理隐藏文件 "subfile"。
这是我使用监视器更改文件夹的代码:
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("/home/user/test/");
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
System.out.println("Begin monitor to test folder: ");
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();
// The filename is the
// context of the event.
@SuppressWarnings("unchecked")
WatchEvent<Path> ev = (WatchEvent<Path>)event;
Path filename = ev.context();
if (filename.toString().startsWith(".")) continue;
if (kind == OVERFLOW) {
continue;
} else if (kind == ENTRY_CREATE) {
System.out.println(kind.name() + ":" +filename);
} else if (kind == ENTRY_DELETE) {
System.out.println(kind.name() + ":" +filename);
} else if (kind == ENTRY_MODIFY) {
System.out.println(kind.name() + ":" +filename);
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
在windows上很好,Mac os,但是当运行在ubuntu 16.04上时,我要面对的问题是:
对于监视文件夹中的现有文件:当我编辑文件时,我收到创建事件,而我想获得修改事件
请帮帮我
谢谢
确保您在 Ubuntu 中用于编辑文件的程序不会创建隐藏文件。一些编辑器这样做是为了确保在程序崩溃时不会丢失任何更改。
因此,请确保您的编辑器在您编辑文件时不会创建隐藏文件,并且如果它确实使用其他程序或处理隐藏文件 "subfile"。