DirectoryStream与PathMatcher没有返回任何路径

时间:2016-05-23 06:10:25

标签: java file wildcard

虽然我已经看到了类似问题的大量答案,但我无法使以下代码正常工作,我认为应该:

File dataDir = new File("C:\\User\\user_id");
PathMatcher pathMatcher = FileSystems.getDefault()
    .getPathMatcher("glob:" + "**\\somefile.xml");
try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(
    dataDir.toPath(), pathMatcher::matches)) {
    Iterator<Path> itStream = dirStream.iterator();
    while(itStream.hasNext()) {
        Path resultPath = itStream.next();
    }
} catch (IOException e) {...

我希望获得所有&#34; somefile.xml&#34;的路径列表。在C:\ User \ user_id和下面的所有子目录下。然而hasNext()方法每次都返回false。

1 个答案:

答案 0 :(得分:2)

DirectoryStream只遍历您提供的目录并匹配该目录中的条目。它在任何子目录中都

您需要使用Files的一个walkXXXX方法查看所有目录。例如:

try (Stream<Path> stream = Files.walk(dataDir.toPath())) {
  stream.filter(pathMatcher::matches)
        .forEach(path -> System.out.println(path.toString()));
}