Glob 语法不适用于 Windows PathMatcher
Glob Syntax not working for Windows PathMatcher
出于某种原因,我似乎无法获得 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
仅匹配文件。
出于某种原因,我似乎无法获得 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
仅匹配文件。