基本上,我正在使用全新的Java 7 WatchService来监控目录.
我有一系列处理程序监听目录发出的每个IO事件.
问题是一些处理程序需要以某种方式更改这些IO事件(==文件)的原因.例如,如果有人将文件放入受监视的文件夹中,则其中一个处理程序可能会更改其扩展名,附加一些文件名或其他内容.
这些操作当然会触发新的IO事件,前面提到的处理程序会获得它们.然后他们再次做出改变.这显然会导致无限循环……
Java是否提供任何方法来处理这种情况?如果没有,你会怎么处理这个?
基本上我只想在事件不是由那些处理程序的动作引起时才运行我的事件处理程序.
更新:至于解决方案,我宁愿只改变主事件路由器的代码,而不是在我编写的每个处理程序中担心这一点(“处理程序仅在未执行此操作时才进行更改”).
解决方法:
如果没有基本情况,这只会导致无限循环.
假设人们将文件放在扩展名为“.bar”的目录中,并且您希望扩展名为“.foo”,当且仅当前扩展名为“.bar”时,您的处理程序才会进行更改.
即使你的处理程序仍然会获得新的< file> .foo的事件,你可以丢弃它,停止“无限”事件传播.