Java 当中使用 glob 匹配路径,为什么 **(globstar)的结果不符合预期?

2022 年 5 月 24 日
 HarryQu

文章中 https://stackoverflow.com/a/62999523/7887882 中提到:tests/**/*.java 可以匹配 tests/HelloWorld.java ,为什么我实验的结果为 false 呢?

Kotlin 代码如下:

    val pathMatcher: PathMatcher = FileSystems.getDefault().getPathMatcher("glob:tests/**/*.java")
    println(pathMatcher.matches(Paths.get("tests/HelloWorld.java"))) // 为什么这里会是 false
    println(pathMatcher.matches(Paths.get("tests/ui/HelloWorld.java"))) // true ,符合预期
    println(pathMatcher.matches(Paths.get("tests/ui/feature1/HelloWorld.java"))) // true ,符合预期
1747 次点击
所在节点    问与答
5 条回复
knightdf
2022 年 5 月 24 日
样例中有 /home/** Matches /home/gus and /home/gus/data on UNIX platforms
HarryQu
2022 年 5 月 24 日
@knightdf 嗯,有看到。

但还是不明白,为什么 pathMatcher.matches(Paths.get("tests/HelloWorld.java") 结果会是 false ,
XhstormR02
2022 年 5 月 25 日
@knightdf
@HarryQu
具体实现跟平台有关咯,因为 Windows 不跨平台
knightdf
2022 年 5 月 25 日
@HarryQu 我测试了下可能实现与 linux 下的 glob **路径匹配不一样,你得写成 `"glob:{tests/*.java,tests/**/*.java}"`才能达到一样的效果
HarryQu
2022 年 5 月 25 日
@knightdf

嗯,我在 mac 、Linux 上执行上述代码,pathMatcher.matches(Paths.get("tests/HelloWorld.java") 结果都是 false ,可能 Java 内部实现不同。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/855086

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX