无论出于什么原因,我似乎无法获得一个glob语法路径匹配器来匹配任何文件。
我将代码简化为以下方法:
public static void match() throws IOException {
String startingLocation = "C:\";
PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:*");
Files.walkFileTree(Paths.get(startingLocation), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path,
BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
System.out.println(path);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
我的理解是,这种方法应该列出我的C驱动器上的所有文件。但是,它不打印单个文件。
有趣的是,如果我用"regex:。"而不是"glob:",它似乎列出了我的C驱动器上的所有文件。我可以把我的glob表达式转换成正则表达式,但我真的不愿意。
有谁知道会出什么问题吗?
请注意,我在Windows 7机器上运行Java 8
请务必仔细阅读javadoc。
如果要打印出C:
驱动器的所有文件,将模式更改为glob:**
或glob:C:\\**
(如javadoc中所写)。
还要注意Files.walkFileTree
只匹配文件。