阅读WatchEvent
的javadoc,我看到count()
方法让我知道某个事件是否因其结果而重复。
返回事件计数。如果事件计数大于1,则这是重复事件。
这究竟是什么意思?是否意味着两个或更多WatchEvent
个对象引用相同的“事件”(例如正在创建的文件)?
我正在试验Oracle网站上example的新WatchService
API,这部分让我很困惑,特别是因为我会为连续运行相同的测试代码获得不同数量的事件(我在其中使用FileWriter
写入文件但未手动与其进行交互),但count()
的结果绝不会超过1。
编辑:我意识到这可能与this other question about repeated events有关,但这并不能解决事件重复的实际意义。
答案 0 :(得分:2)
我花了一些时间试验这个,这是我的结论:
如果同一文件
f
发生了多个e
类型的事件,则会重复针对文件e
和事件类型f
的事件。如果多个文件
e
,f1
和f2
发生f3
类型事件,但每次只发生一次,则不会重复这些事件。
当您从.take()
WatchKey
WatchService
时,对于遇到事件的每个文件,您将获得WatchEvent
。如果自上次从.count()
获得WatchKey
以来,该文件类型多次发生在该文件中,则WatchService
将大于1。
也就是说,如果您正在观看其中包含A.txt
的目录,则会发生以下事件:
B.txt
在目录中创建。B.txt
写入。A.txt
写入。B.txt
已删除。A.txt
再次写入。您将获得四个WatchEvents
:
B.txt
的创建事件。B.txt
的修改事件。A.txt
的修改事件。其.count()
将为2。B.txt
的删除事件。这意味着您3*n
中的WatchKey
事件永远不会超过n
,其中OVERFLOW
是目录中任何位置的文件数。
StandardWatchEventKinds
中定义了四种类型的事件,但{{1}}事件表示事件可能已丢失,因此我从上面的数字中省略了它。
答案 1 :(得分:0)
监视服务允许您为目录中的事件注册侦听器。如果在通知服务之前事件多次发生,则会获得增量,而不是让两个此类事件导致通知。
这是关于文件的,因此它处理目录中的文件创建,修改和删除。