0

我已经成功地向监视器注册了 CREATE、MODIFY 和 DELETE 事件,它们对我来说工作得很好。对于我的问题,我想在触发 CREATE 事件后进行一些文件修改,例如“重命名”,因此接下来也会触发 MODIFY 事件,但是我不想要它。这次我可以省略 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();
                }   
            }
4

2 回答 2

0

你应该看看jpathwatch

它支持像ENTRY_RENAME_FROM\这样的事件TO

于 2013-02-01T06:03:30.433 回答
0

我认为没有办法告诉监视服务暂时忽略事件。我建议您在代码中执行此操作。

但是,您似乎在这里所做的是通过让监视服务通知您刚刚创建了新文件来创建文件的备份。但我认为这不会奏效。当您的代码收到事件时,旧版本的文件可能已经被新版本覆盖。然后您的move呼叫会将新文件移动到“临时”位置。

我建议您获取创建文件的代码以在打开新文件之前备份原始文件。您的代码将更简单、更可靠并且更易于移植。

于 2013-02-01T07:01:30.503 回答