2012-04-13 208 views

回答

2

你在找什么是递归。

您需要在目录中,通过每个子目录走...伪代码:

function iteratePath(File root, List<File> registerMe) { 
     if (root!= null && root.isDirectory()) { 
      registerMe.add(root); 
      for (File f : root.listFiles()) { 
       iteratePath(f, registerMe); 
      } 
     } 
} 
2

与手表服务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()方法。

不要忘记,如果稍后出现新的子目录,您可能还想为其添加一个观察器。