我已经使目录C:/my_dir
中的检测更改了一些代码,它工作的很好。 (I follow this link)更改监视目录和子目录
但我需要watcher也检测所有子目录中的变化。
like C:/my_dir/*
有什么想法?
我已经使目录C:/my_dir
中的检测更改了一些代码,它工作的很好。 (I follow this link)更改监视目录和子目录
但我需要watcher也检测所有子目录中的变化。
like C:/my_dir/*
有什么想法?
你在找什么是递归。
您需要在目录中,通过每个子目录走...伪代码:
function iteratePath(File root, List<File> registerMe) {
if (root!= null && root.isDirectory()) {
registerMe.add(root);
for (File f : root.listFiles()) {
iteratePath(f, registerMe);
}
}
}
与手表服务API,你必须注册为每个子目录一个单独的手表。
我不确定你是只想看根目录的子目录,还是只看根目录下的整个目录树。
如果是前者,你可以使用Files.newDirectoryStream()
通过目录的子目录迭代:
for (Path subDir : Files.newDirectoryStream(rootPath,
new DirectoryStream.Filter<Path>() {
@Override
public boolean accept(Path entry) throws IOException {
return Files.isDirectory(entry);
}
}) {
// add watcher
}
如果是后者,那么你可以使用Files.walkFileTree()
方法来代替。事实上,这是他们在你链接的例子中所做的。看看WatchDir.java中的registerAll()
方法。
不要忘记,如果稍后出现新的子目录,您可能还想为其添加一个观察器。
您可能要考虑使用Apache Commons IO库中的FileAlterationMonitor。该API相当容易使用,并且有一些示例here。