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

use*_*743 3 groovy

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

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

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

Mic*_*das 5

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

new FileNameFinder()
    .getFileNames('School/Exams/Questions/Subjects/', '**/Advanced/questions.txt')
Run Code Online (Sandbox Code Playgroud)

  • 您将像上面一样执行`def fileNames = new FileNameFinder()...`,然后必须遍历文件名,为其创建文件对象,然后执行诸如`file.text`之类的操作来获取内容。 (2认同)

Mat*_*and 2

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

\n\n

我认为出色的AntBuilder可能是您的朋友。给出以下常规代码:

\n\n
new AntBuilder().fileScanner {\n  fileset(dir: \'.\', includes: \'**/Advanced/questions.txt\')\n}.each { File f -> \n  println "Found file ${f.path}"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

(请注意包含模式中使用“任意深度搜索”双星通配符)

\n\n

以及以下目录结构:

\n\n
$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 one\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ten\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Advanced\n\xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 questions.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 three\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 thirty\n\xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Advanced\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 two\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 twenty\n    \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Advanced\n    \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 questions.txt\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 twentyone\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Advanced\n
Run Code Online (Sandbox Code Playgroud)\n\n

该脚本产生:

\n\n
Found file one/ten/Advanced/questions.txt\nFound file two/twenty/Advanced/questions.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了便于阅读,路径被缩写。

\n