2016-06-09 129 views
1

让我们:为什么glob:*匹配PathMatcher中的任何路径?

Path path = Paths.get("C:\\1.txt"); 

下面的代码打印 “真”:

PathMatcher matcher = FileSystems.getDefault().getPathMatcher("regex:.*"); 
System.out.println(matcher.matches(path)); 

,但下面的代码打印出 “假”:

PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*"); 
System.out.println(matcher.matches(path)); 

为什么?

我期待在两种方法中都有true

Glob page from Wikipedia,通配符*表示:

任意数目的字符,包括无

详细匹配:

  • 的Java 8
  • 的Windows 7
+1

与其查阅维基百科关于glob的含义,我强烈建议[查看'getPathMatcher']的文档(https://docs.oracle.com/javase/7/docs/api/爪哇/ NIO /文件/ FileSystem.html#getPathMatcher(java.lang.String中))。但是它也有类似的说法:*“\ *字符与名称组件的零个或多个字符匹配,不会跨越目录边界。”*另请注意:*“\ * \ *字符匹配零个或多个跨越目录边界的字符。”*也许你想'**'(不知道,从来没有使用'PathMatcher')。 –

+0

此外,您从Wikipage链接:COMMAND.COM和cmd.exe具有大多数常见语法有一些限制:没有[...]和*可能只出现在模式的结尾,而不是# –

+0

@JorgeCampos:我的Windows 8系统上的'cmd.exe'在模式开始处用'*'表示很好。 –

回答

1

正如@TJ克罗德说,你应该好这一去:

PathMatcher matcher2 = FileSystems.getDefault().getPathMatcher("glob:**"); 
System.out.println(matcher2.matches(path)); 

欲了解更多信息请参阅this它说:

的**字符匹配零个或多个字符,穿越目录 界限。

相关问题