繁体   English   中英

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

[英]How could I omit detection for some files with Java 7 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();
                }   
            }

你应该看看jpathwatch

它支持ENTRY_RENAME_FROM \\ TO事件

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

但是,您在这里似乎要执行的操作是通过让watch服务注意到您刚刚创建了新文件来创建文件的备份。 但我认为这行不通。 在您的代码获取事件时,该文件的旧版本可能已经被新版本覆盖。 然后,您的move调用会将新文件移动到“临时”位置。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM