如何在groovy中向文件路径添加通配符?

如何在groovy中向文件路径添加通配符?,groovy,Groovy,我正在写一个spock测试,需要在文件路径中添加通配符。 脚本应该查看subjects文件夹和所有子文件夹,以找到advanced文件夹并查找exam.txt,但是,我一直收到一个错误消息FileNotFound 我相信代码是正确的,因为它可以很好地解析文件,但通配符位会引发异常 new File("School/Exams/Questions/Subjects/**/Advanced") if(it.name.matches("questions.txt"){ print it

我正在写一个spock测试,需要在文件路径中添加通配符。 脚本应该查看subjects文件夹和所有子文件夹,以找到advanced文件夹并查找exam.txt,但是,我一直收到一个错误消息FileNotFound

我相信代码是正确的,因为它可以很好地解析文件,但通配符位会引发异常

new File("School/Exams/Questions/Subjects/**/Advanced")
 if(it.name.matches("questions.txt"){
   print it
       }

java File类不支持通配符,这就是您看到FileNotFoundException的原因。File类正在尝试查找路径名中包含星号字符的文件

我想groovy可能是你的朋友。给定以下groovy代码:

new AntBuilder().fileScanner {
  fileset(dir: '.', includes: '**/Advanced/questions.txt')
}.each { File f -> 
  println "Found file ${f.path}"
}
(注意在includes模式中使用了“在任何深度搜索”双星通配符)

以及以下目录结构:

$ tree
.
├── one
│   └── ten
│       └── Advanced
│           └── questions.txt
├── three
│   └── thirty
│       └── Advanced
└── two
    ├── twenty
    │   └── Advanced
    │       └── questions.txt
    └── twentyone
        └── Advanced
脚本将生成:

Found file one/ten/Advanced/questions.txt
Found file two/twenty/Advanced/questions.txt
为便于阅读,路径被缩短

您可以使用获取文件名列表:

new FileNameFinder()
    .getFileNames('School/Exams/Questions/Subjects/', '**/Advanced/questions.txt')

什么是
FileNameHandler
?它是从哪里来的?在这之后我如何解析所有
questions.txt
文件?您可以像上面那样执行
def fileNames=new FileNameFinder()…
,然后必须循环遍历文件名,为它们创建文件对象,然后执行类似
file.text
的操作来获取内容。