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()
    将为2
  • B.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?如果您所做的只是在收到修改事件时读取文件内容,这是否意味着您可以忽略重复/重复的事件?作为文件的内容,在您处理事件的时候才是最重要的,而且您似乎无法在第一次重复事件中获得内容?