尽管我看到了很多类似问题的答案,但我无法使以下代码正常工作:
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) {...
我希望在C:\ User \ user_id下获得所有“ somefile.xml”的路径列表,以及该路径下的所有子目录。但是hasNext()方法每次都返回false。
最佳答案
DirectoryStream
仅遍历您提供的目录并匹配该目录中的条目。它不在任何子目录中查找。
您需要使用Files
的walkXXXX方法之一来查看所有目录。例如:
try (Stream<Path> stream = Files.walk(dataDir.toPath())) {
stream.filter(pathMatcher::matches)
.forEach(path -> System.out.println(path.toString()));
}