【发布时间】:2016-10-28 21:30:24
【问题描述】:
无论出于何种原因,我似乎无法获得一个 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 表达式转换为正则表达式,但我真的不想这样做。
有人知道可能出了什么问题吗?
请注意,我在装有 Java 8 的 Windows 7 机器上运行
【问题讨论】:
-
从 the documentation 看来,您的 glob 表达式应该类似于
"glob:C:\\**"。 -
它也不适用于“glob:C:\\**”。
-
你试过
"glob:C:\\\\**"吗? javadoc 声明:“注意反斜杠被转义;作为 Java 语言中的字符串文字,模式将是"C:\\\\*"” -
^ 关于那条评论,你可以参考stackoverflow.com/a/25260067/1743880吗?