为什么Groovy找不到我的文件?

时间:2017-08-09 15:25:22

标签: groovy

我在groovy中编写了一个脚本,在具有某些名称的给定目录中递归地查找文件java测试文件,代码的相关部分是:

def projectRootDirectory = args.length ? new File(args[0]) : new File(System.getProperty("user.dir"))
        def srcFilesCount = 0, testFilesCount = 0, srcLinesCount=0, testLinesCount=0
        def srcFileSubstringPattern = '.java'
        def testFileSubstringPattern = 'Test.java'

        projectRootDirectory.eachDirRecurse() { dir ->
             dir.eachFile {
                 if (it.name.endsWith(testFileSubstringPattern) || it.name ==~ /Test.*java/ ||
                         it.name.endsWith('Tests.java') || it.name.endsWith('TestCase.java')) {
                     //println "Test file found: " + it.name
                     testFilesCount++
                     it.eachLine { testLinesCount++ }
                 } else if (it.name.contains(srcFileSubstringPattern)) {
                     srcFilesCount++
                     it.eachLine { srcLinesCount++ }
                 }
             }
         }

它找到了使用SVN克隆的repo中已存在的文件,例如someTestCase.java,但是当我在Windows 7中通过Cygwin使用命令touch dummyTestCase.java创建一些新文件时,或者通过Windows 7资源管理器right click -> New -> Text Document选项并将其重命名为TestDummy.java,但它找不到它们。该脚本还以相同的方式处理相应文件的副本,即它找到已存在的旧文件的副本,但不查找我创建的新文件的副本。我甚至在新创建的文件上打开了文件权限,但没有任何变化。而通过Cygwin的BASH find命令总是找到所有文件没有任何问题。我已确认使用诊断打印语句,脚本正在查找正确的目录。我甚至通过让脚本在那里创建一些文件并确认它们是在正确的位置创建来确认这一点。

1 个答案:

答案 0 :(得分:1)

哇,答案结果非常简单。我用eachDirRecurse替换了eachFileRecurse,因此也消除了嵌套循环。非常感谢所有评论作者,他们的帮助促使我发现了这一点。