【问题标题】:Java 7 glob issueJava 7 全局问题
【发布时间】: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 匹配,而不再被不匹配的 *.jpg glob 匹配。

标签: java glob


【解决方案1】:

将全局模式更改为:

"glob:**.jpg"

您的模式仅匹配包含至少一个目录的文件路径。

例如,以下模式仅匹配具有至少两个目录的路径(例如路径:a/b/image.jpg)

"glob:**/**/*.jpg"

仅供参考,它不搜索文件,它只测试给定路径是否与模式匹配。

【讨论】:

  • "仅供参考,它不搜索文件,它只测试给定路径是否与模式匹配。" - 我需要的闪光。
  • 现在对我来说很好。谢谢大家的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多