【发布时间】:2018-10-31 14:09:13
【问题描述】:
如我所愿,我无法真正理解如何在 java 中处理 glob。 下面是一个小程序:
public class Test{
public static void main(String args[]) throws IOException{
Path p1 = Paths.get("C:\\Users\\all\\Test\\cool.jpg");
Path p2 = Paths.get("cool.jpg");
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**/*.jpg")
System.out.println(matcher.matches(p1));
System.out.println(matcher.matches(p2));
}
}
结果为真/假
使用“glob: *.jpg”运行,结果为 FALSE /是的
所以看起来它第一次在文件夹外搜索是找到项目(java 文件),而第二次在文件夹中搜索是找到 java 文件。
如果我将第二条路径更改为任何其他位置(我的 java 项目所在的位置除外),结果是:对于 glob:**/*.jpg -> TRUE/TRUE 和对于 glob:*.jpg -> FALSE /假。
所以我的问题是:我很清楚使用 glob:*.???它在文件夹中搜索 java 项目所在的位置并使用 glob:**/*.???它搜索到 java 项目所在文件夹以外的特定路径。因为在文档中是这样写的:
glob 模式被指定为一个字符串,并与其他字符串匹配,例如目录或文件名。 Glob 语法遵循几个简单的规则: 星号 * 匹配任意数量的字符(包括无字符)。 两个星号 ** 与 * 类似,但跨越目录边界。此语法通常用于匹配完整路径。
但没有提到目录边界是指Java项目所在的目录。
【问题讨论】:
-
"如果我将第二条路径更改为任何其他位置" -> 那么该路径包含
/,对吗?因为这可以解释为什么它会被包含/的**/*.jpg匹配,而不再被不匹配的*.jpgglob 匹配。