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

2022-05-24 22:58:45 +08:00
 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 ,符合预期
926 次点击
所在节点    问与答
5 条回复
knightdf
2022-05-24 23:22:30 +08:00
样例中有 /home/** Matches /home/gus and /home/gus/data on UNIX platforms
HarryQu
2022-05-24 23:48:32 +08:00
@knightdf 嗯,有看到。

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

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

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

https://www.v2ex.com/t/855086

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

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

© 2021 V2EX