我已经成功地将创建,修改和删除事件注册到监视器,它们对我来说工作正常。对于我的问题,我想在触发 CREATE 事件后进行一些文件修改,例如"重命名",因此接下来也会触发 MODIFY 事件,但我不想要它。这次我可以省略修改事件吗?
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();
}
}
没有办法告诉监视服务暂时忽略事件。 我建议你在代码中这样做。
但是,您似乎在这里所做的是通过让监视服务注意到您刚刚创建了新文件来创建文件的备份。 但我认为这行不通。 当您的代码获取事件时,旧版本的文件可能已经被新版本覆盖。 然后,您的move
调用会将新文件移动到"临时"位置。
我建议您获取创建文件的代码,以便在打开新文件之前备份原始文件。 您的代码将更简单、更可靠且更有可能是可移植的。
你应该看看 jpathwatch
它支持诸如 ENTRY_RENAME_FROM
\ TO