如何关闭Apache Commons FileAlterationObserver的递归目录监测?
如何让Apache Commons目录监控仅监听指定目录(不递归子目录)
当然可以,你只需要通过FileAlterationObserver的带过滤器参数的构造方法,限制它不递归遍历子目录即可。
默认情况下,FileAlterationObserver会使用DirectoryFileFilter.DIRECTORY作为目录过滤器,这会让它自动递归所有子目录。要关闭这个行为,只需将目录过滤器设置为拒绝所有子目录即可,用Commons IO提供的现成过滤器就能快速实现:
import org.apache.commons.io.filefilter.FalseFileFilter; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.monitor.FileAlterationObserver; // 初始化仅监控顶层目录的观察者 FileAlterationObserver observer = new FileAlterationObserver( new File(directoryPath), FileFilterUtils.trueFileFilter(), // 接受当前目录下的所有文件/目录 FalseFileFilter.FALSE // 拒绝进入任何子目录,关闭递归 );
自定义过滤逻辑(可选)
如果需要更灵活的控制(比如允许特定子目录但排除其他),可以自定义FileFilter:
FileFilter customDirFilter = file -> { // 仅允许当前目录,不进入任何子目录 return !file.isDirectory(); }; FileAlterationObserver observer = new FileAlterationObserver( new File(directoryPath), FileFilterUtils.trueFileFilter(), // 接受当前目录下的所有文件 customDirFilter );
这样配置后,观察者只会触发指定目录下直接文件/目录的创建、修改、删除事件,不会处理子目录内的任何变更,彻底避免递归带来的额外开销。
内容的提问来源于stack exchange,提问作者mstoreysmith
相关产品推荐
相关产品推荐

