Java “一项活动是什么意思?”;重复;
阅读Java “一项活动是什么意思?”;重复;,java,events,watchservice,Java,Events,Watchservice,阅读WatchEvent的javadocs,我发现该方法让我知道事件是否通过其结果重复 返回事件计数。如果事件计数大于1,则这是一个重复事件 这到底是什么意思?这是否意味着两个或多个WatchEvent对象引用相同的“事件”(例如,正在创建的文件) 我正在Oracle的网站上试验新的WatchServiceAPI,这一部分让我感到困惑,特别是因为我将在同一测试代码的连续运行中获得不同数量的事件(其中我使用FileWriter写入一个文件,而不与之手动交互),但是count()的结果的值从不超过1
WatchEvent
的javadocs,我发现该方法让我知道事件是否通过其结果重复
返回事件计数。如果事件计数大于1,则这是一个重复事件
这到底是什么意思?这是否意味着两个或多个WatchEvent
对象引用相同的“事件”(例如,正在创建的文件)
我正在Oracle的网站上试验新的WatchService
API,这一部分让我感到困惑,特别是因为我将在同一测试代码的连续运行中获得不同数量的事件(其中我使用FileWriter
写入一个文件,而不与之手动交互),但是count()的结果
的值从不超过1
编辑:我意识到这可能与有关,但这并不回答重复事件的实际含义。监视服务允许您为目录中的事件注册侦听器。如果一个事件在通知您的服务之前发生多次,它会得到一个增量,而不是两个这样的事件引起通知
这是专门针对文件的,因此它可以处理目录中的文件创建、修改和删除。我花了一段时间对此进行了试验,这是我的结论: 对于文件
f
和事件类型e
,如果同一文件f
发生了多个e
类型的事件,则重复事件
如果对多个文件f1
、f2
和f3
发生e
类型事件,但每次仅发生一次,则这些事件都不会重复
当您从WatchService
获取.take()
一个WatchKey
时,您将获得一个WatchEvent
,用于每个发生事件的文件以及它所经历的每种事件类型。如果自上次从WatchService
获取WatchKey
以来,该文件多次发生此类事件,则.count()
将大于1
也就是说,如果您正在查看一个目录,其中包含a.txt
,则会发生以下事件:
B.txt
在目录中创建B.txt
被写入A.txt
被写入B.txt
被删除A.txt
将再次写入监视事件
:
B.txt
的创建事件B.txt
的修改事件A.txt
的修改事件。其.count()
将为2B.txt
的删除事件WatchKey
中获得的事件永远不会超过3*n
,其中n
是目录中任意点的文件数
中定义了四种类型的事件,但溢出事件表明事件可能已丢失,因此我从上述数字中省略了它。这是否意味着双击?@DavidWallace我不知道,你告诉我。我甚至没有点击正在讨论的文件,所以我说不出来。我从来没有使用过这个类——但是如果你在监视目录中创建的文件,然后在目录中创建一个文件,然后在目录中创建另一个文件,也许这是一个重复的事件?@ajb我当然希望不是,因为检查
计数是否大于1有什么意义?我每次都必须检查事件上下文以确定。你能解释一下“一个事件发生不止一次”是什么意思吗?比如说,在我的WatchService
注意到之前,我修改了目录中的两个文件,我会从key.pollEvents()中得到两个修改事件吗
或者我会得到一个计数为2的修改事件吗?我阅读文档的方式是监视目录;如果在WatchService开始构建通知之前修改了两个文件,您将收到一个通知,说明发生了两个事件。这是什么意思?我只修改了一个文件,所以我修改了测试代码来修改两个文件,得到了两个修改事件。在从WatchService
获取事件之前,我添加了1秒的wait
,得到了两个modify事件,每个事件的计数为2(可能与链接问题中的原因相同)这是否意味着计数
是指特定类型的事件发生在该目录中特定文件上的次数?e、 g.如果文件A.txt
被多次写入,则带有context()
A.txt
的修改事件的计数将大于1?如果您所做的只是在收到修改事件时读取文件内容,这是否意味着您可以忽略重复/重复的事件?作为文件的内容,在您处理事件的时候才是最重要的,而且您似乎无法在第一次重复事件中获得内容?