我目前正在编写spock测试,需要在文件路径中添加通配符。 脚本应该查看subject文件夹和所有子文件夹以查找高级文件夹并查找exam.txt,但是,我一直收到错误说FileNotFound。
我相信代码是正确的,因为它可以解析文件,但通配符位会引发异常。
new File("School/Exams/Questions/Subjects/**/Advanced")
if(it.name.matches("questions.txt"){
print it
}
答案 0 :(得分:4)
您可以使用FileNameFinder获取文件名列表:
new FileNameFinder()
.getFileNames('School/Exams/Questions/Subjects/', '**/Advanced/questions.txt')
答案 1 :(得分:2)
java File类不支持通配符,这就是您看到FileNotFoundException的原因。 File类正在尝试在路径名中查找带有星号字符的文件。
我认为groovy AntBuilder可能是你的朋友。鉴于以下groovy代码:
new AntBuilder().fileScanner {
fileset(dir: '.', includes: '**/Advanced/questions.txt')
}.each { File f ->
println "Found file ${f.path}"
}
(注意在任何深度使用'搜索包含模式中的双星通配符)
和以下目录结构:
$ 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
路径缩写为可读性。