正如我想要的那样,我无法真正理解如何在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 / TRUE
所以它看起来像是第一次在文件夹外搜索被定位的项目(java文件)和第二次在文件夹中找到java文件。
如果我将第二条路径更改为任何其他位置(除了我的java项目之外),结果是:对于glob:**/*..jpg -> TRUE/TRUE,对于glob:*.jpg -> FALSE/FALSE。
所以我的问题是:我很明白使用glob:*?它在文件夹中搜索被java项目定位并使用glob:**/*.?它搜索一个特定的路径,而不是被java项目定位的文件夹。因为在文档中:
glob模式指定为字符串,并与其他字符串相匹配,例如目录或文件名。Glob语法遵循几个简单的规则:星号*匹配任意数量的字符(包括无字符)。两个星号,**,工作方式类似于*,但跨越目录边界。此语法通常用于匹配完整路径。
但是没有提到指向Java项目所在目录的目录边界。
发布于 2018-10-31 14:21:56
将glob模式更改为:
"glob:**.jpg"您的模式只匹配包含至少一个目录的文件路径。
例如,下面的模式只匹配至少两个目录的路径(例如路径: a/b/image.jpg)
"glob:**/**/*.jpg"而只是FYI,它不搜索文件,它只测试给定的路径是否匹配模式。
https://stackoverflow.com/questions/53085359
复制相似问题