无论出于何种原因,我似乎无法获得全局语法路径匹配器来匹配任何文件。全局语法不适用于Windows PathMatcher
我已经简化我的代码到下面的方法:
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盘上。但是,它不打印出单个文件。有趣的是,如果我用“正则表达式:。”而不是“glob:”运行同样的东西,它似乎列出了我C驱动器上的所有文件。
我可以通过将glob表达式转换为正则表达式的努力,但我真的不想。
有没有人有任何想法可能会出错?
请注意,我在Windows 7机器上使用Java 8
从[文档](https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystem.html#getPathMatcher%28java.lang.String%29)它似乎就好像你的glob表达式应该类似于'“glob:C:\\ **”'。 –
它也不适用于“glob:C:\\\ **”。 – NateW
你试过'“glob:C:\\\\ **”'? javadoc声明:*“请注意反斜杠被转义;作为Java语言中的字符串字面值,该模式将与该注释相关”C:\\\\\ *“'”* –