答案 0 :(得分:2)
你要找的是递归。
您需要遍历目录中的每个子目录...伪代码:
function iteratePath(File root, List<File> registerMe) {
if (root!= null && root.isDirectory()) {
registerMe.add(root);
for (File f : root.listFiles()) {
iteratePath(f, registerMe);
}
}
}
答案 1 :(得分:2)
使用Watch Service 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()
方法。
不要忘记,如果稍后出现一个新的子目录,您可能还想为此添加一个观察者。
答案 2 :(得分:1)
您可能需要考虑使用Apache Commons IO库中的FileAlterationMonitor。 API非常易于使用,并且有一些示例here。