2

我可以使用Jnotify文件创建、修改等监听事件。我关心的是 Jnotify 的工作原理。我的意思是它使用 get 事件。参考资源使用是否安全。我读到另一个 SO 问题 - https://stackoverflow.com/questions/11100003/why-does-jnotify-consume-so-much-resources - 它消耗大量资源。

我可以解决我的问题的另一种方法是一个while循环,直到一个条件然后程序被关闭。

哪个更好用会消耗更少的资源。

4

2 回答 2

5

linnotify与内核对话以获取有关文件系统更改的通知。没有轮询,内核会通知订阅文件夹的更改。

jnotify是一个围绕libjnotify的 JNI 包装器。

尽管如此,如果您使用的是 Java 7,这一切都已成为历史,被新的 java 文件 I/O (NIO.2) 包所取代。

于 2012-07-24T13:58:40.150 回答
2

网站...

JNotify Linux 支持

JNotify Linux API 是 Linux INotify API 的精简包装器。由于 Linux INotify API 不支持对目录进行递归侦听,因此 JNotify 通过在监视目录下的每个子目录上(透明地)创建 INotify 监视来添加此功能。这个过程花费的时间与树中被递归监视的目录数量成线性关系,并且需要系统资源,即 - INotify 监视,这是有限的,默认情况下每个进程有 8192 个监视。

这些限制已记录在案。还提供了有关实施的想法。

您的问题与Java 中的 File changed listener有关,高度投票的答案是DefaultFileMonitor,来自 Apache commons。我建议你试一试。

于 2012-07-24T14:01:54.837 回答