使用Java7 WatchService,我怎么能忽略对某些文件的检测呢
我已成功地将创建、修改和删除事件注册到监视器,它们对我来说运行良好。对于我的问题,我想做一些文件修改,如'重命名'一旦创建事件被触发,所以修改事件将被触发,以及下一步,但我不希望它。这次我可以省略修改事件吗使用Java7 WatchService,我怎么能忽略对某些文件的检测呢,java,events,watchservice,Java,Events,Watchservice,我已成功地将创建、修改和删除事件注册到监视器,它们对我来说运行良好。对于我的问题,我想做一些文件修改,如'重命名'一旦创建事件被触发,所以修改事件将被触发,以及下一步,但我不希望它。这次我可以省略修改事件吗 if(event.kind().equals(StandardWatchEventKinds.ENTRY_CREATE)){ try{ if(!name.toString().startsWith("~")){
if(event.kind().equals(StandardWatchEventKinds.ENTRY_CREATE)){
try{
if(!name.toString().startsWith("~")){
Path tempPath = Paths.get(path+"/~temp_"+name.getFileName());
Path oldPath = Paths.get(path+"/"+name.getFileName());
Files.move(oldPath, tempPath, StandardCopyOption.REPLACE_EXISTING);
PDFStamp.stampPDF(tempPath.toString(), oldPath.toString());
omitPath.put(name, name);
Files.delete(tempPath);
}
}catch(Exception e){
e.printStackTrace();
}
}
你应该看看
它支持类似于
ENTRY\u RENAME\u从
\到
的事件。我认为没有办法告诉手表服务暂时忽略事件。我建议您在代码中这样做
然而,您在这里所做的似乎是通过让watch服务通知您刚刚创建了一个新文件来创建一个文件备份。但我认为这行不通。当代码获取事件时,文件的旧版本可能已经被新版本覆盖。然后您的move
调用会将新文件移动到“temp”位置
我建议您在打开新文件之前获取创建文件以备份原始文件的代码。您的代码将更简单、更可靠、更易于移植。最后,我还必须制作一个元文件来存储每个文件的状态,并在事件被捕获时检查/忽略。敬请关注,但是否有任何关于Java 7 nio的建议?敬请关注。我真正想要的是,一旦新文件放到文件夹中,就会进行一些修改,并最终覆盖该文件。让我困惑的是,文件上的一系列事件会一个接一个地触发不同的事件,但我无法读取文件的状态,因为文件在事件弹出之前已被修改和保存。对不起,我不明白你在说什么。但是,如果您希望能够在修改发生之前获取文件的状态,则无法使用watch服务来完成此操作。watch服务在事件发生之后而不是发生之前报告事件。我不需要知道状态,但要在重命名Gain时忽略修改和删除事件,您不能。。。就像我在回答的第一行说的。您必须编写应用程序代码才能忽略事件。谢谢。我通过记录动作和验证检查来实现。但我仍然期待着如何提取原始文件的用户信息。不管怎样,你帮了我一个大忙,非常感谢。