V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
HarryQu
V2EX  ›  问与答

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

  •  
  •   HarryQu · 2022-05-24 22:58:45 +08:00 · 937 次点击
    这是一个创建于 913 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文章中 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 ,符合预期
    
    5 条回复    2022-05-25 11:42:54 +08:00
    knightdf
        1
    knightdf  
       2022-05-24 23:22:30 +08:00
    样例中有 /home/** Matches /home/gus and /home/gus/data on UNIX platforms
    HarryQu
        2
    HarryQu  
    OP
       2022-05-24 23:48:32 +08:00
    @knightdf 嗯,有看到。

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

    嗯,我在 mac 、Linux 上执行上述代码,pathMatcher.matches(Paths.get("tests/HelloWorld.java") 结果都是 false ,可能 Java 内部实现不同。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:25 · PVG 18:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.