53

WatchService 看起来是一项很棒的技术,但它太慢了,无法在我测试过的 OS X 和 Linux 系统上使用。雪上加霜的是,它似乎也没有收到所有事件的通知。

我自己的代码和 Oracle 的规范示例都是这种情况。(http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java

我认识到 OS X OpenJDK 端口不确定此功能(请参阅https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status

有没有人成功地在生产中使用它?

4

2 回答 2

44

如果我改变,我有更好的响应时间

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
于 2013-08-21T16:03:42.700 回答
31

JDK 7 还没有用于 MacOS 的 WatchService 的本机实现。它不是监听本机文件系统事件,而是使用备用 sun.nio.fs.PollingWatchService,它定期遍历文件系统并检查树中每个文件和子目录的最后修改时间戳。我还发现它非常慢。

WatchService for Mac 有一个本机实现:

http://code.google.com/p/barbarywatchservice/

我没有尝试自己使用它。

于 2012-06-25T01:18:55.393 回答