如何使用Java 7 WatchService省略对某些文件的检测

时间:2013-02-01 05:54:49

标签: java events watchservice

我已成功向监视器注册了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();
                }   
            }

2 个答案:

答案 0 :(得分:0)

您应该查看jpathwatch

它支持ENTRY_RENAME_FROM \ TO

等活动

答案 1 :(得分:0)

我认为有一种方法可以告诉手表服务暂时忽略事件。我建议您在代码中执行此操作。

然而,你似乎在这里做的是通过让监视服务注意到你刚刚创建了一个新文件来创建文件的备份。但我认为这不会起作用。当您的代码获取事件时,旧版本的文件可能已被新文件覆盖。然后,您的move调用会将新文件移至“临时”位置。

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