Java 全局语法不适用于Windows PathMatcher
无论出于何种原因,我似乎无法获得全局语法路径匹配器来匹配任何文件 我已将代码简化为以下方法:Java 全局语法不适用于Windows PathMatcher,java,glob,Java,Glob,无论出于何种原因,我似乎无法获得全局语法路径匹配器来匹配任何文件 我已将代码简化为以下方法: public static void match() throws IOException { String startingLocation = "C:\\"; PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:*"); Files.walkFileTre
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;
}
});
}
public static void match()引发IOException{
字符串开始位置=“C:\\”;
PathMatcher PathMatcher=FileSystems.getDefault().getPathMatcher(“glob:”);
Files.walkFileTree(path.get(startingLocation),新的SimpleFileVisitor(){
@凌驾
public FileVisitResult visitFile(路径路径,
BasicFileAttributes(属性属性)引发IOException{
if(pathMatcher.matches(路径)){
System.out.println(路径);
}
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult visitFileFailed(路径文件,IOException exc)
抛出IOException{
返回FileVisitResult.CONTINUE;
}
});
}
我的理解是,该方法应该列出我的C驱动器上的所有文件。但是,它不会打印出单个文件
有趣的是,如果我用“regex:”而不是“glob:”运行相同的东西,它似乎列出了我的C驱动器上的所有文件
我可以努力将glob表达式转换成正则表达式,但我真的不愿意
有人知道会出什么问题吗
请注意,我是在使用Java 8的Windows 7计算机上运行的,请务必仔细阅读
如果要打印出C:
驱动器的所有文件,
将模式更改为glob:*
或glob:C:\\\\***
(如javadoc中所述)
还请注意文件。walkFileTree
只匹配文件。请务必仔细阅读本手册
如果要打印出C:
驱动器的所有文件,
将模式更改为glob:*
或glob:C:\\\\***
(如javadoc中所述)
另外请注意,
文件。walkFileTree
只匹配文件。从它看来,您的glob表达式应该类似于“glob:C:\\\**”
。它也不能与“glob:C:\\**”一起使用。您是否尝试过“glob:C:\\\\\**”
?javadoc声明:“请注意,反斜杠是转义的;作为Java语言中的字符串文本,模式将是“C:\\\*”
“^关于该注释,您可以参考吗?从它看来,您的glob表达式应该类似于“glob:C:\\**”
。它也不适用于“glob:C:\\**”。您尝试过“glob:C:\\\**”
?javadoc声明:“注意反斜杠是转义的;作为Java语言中的字符串文本,模式应该是“C:\\\*”
“^关于这个注释,你能参考一下吗?我想它应该是glob:C:\\\\\***
。是的,我也是。(刚刚测试过)。glob:*
确实有效,并在C驱动器下打印了文件。谢谢@JonnyHenly,你说得对(也是在javadoc中编写的)只是为了让它更清楚一点(一开始我不理解):在glob中作为路径分隔符的反斜杠总是需要转义的。如果从字符串文本构造glob,这会导致一个路径分隔符有4个斜杠。我想它需要是glob:C:\\\***
。是的,我也是。(刚刚测试过)。glob:*
确实有效,并在C驱动器下打印了文件。谢谢@JonnyHenly,你是对的(也是用javadoc编写的),只是为了让它更清楚一点(我一开始不明白):始终需要转义全局框中作为路径分隔符的反斜杠。如果从字符串文本构造全局框,则一个路径分隔符将有4个斜杠。