2017-08-09 105 views
0

我寫了一個腳本,在常規遞歸地找到與某些名稱的指定目錄下文件的Java測試文件,代碼的有關部分是:爲什麼Groovy無法找到我的文件?

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,例如someTestCase.java,但是當我通過使用命令touch dummyTestCase.java在Windows 7中通過Cygwin或通過Windows 7資源管理器right click -> New -> Text Document選項創建一些新的並將其重命名爲TestDummy.java之類的東西時,它找不到它們。腳本也以相同的方式處理各個文件的副本,即它找到已經存在但不是我創建的新文件的副本。我甚至打開文件權限,以最大限度地創建新創建的文件,但沒有改變。而通過Cygwin的BASH find命令總能找到所有文件沒有任何問題。我已經確認使用診斷打印語句腳本正在查找正確的目錄。我甚至通過讓腳本在那裏創建一些文件並確認它們在正確的位置創建來證實了這一點。

+0

你能顯示你的查找文件代碼嗎? – aristotll

+0

你可以把從目錄加載文件的代碼。通常情況下,上面沒有問題,除非有大小寫問題。 –

+0

@aristotll我編輯問題以顯示更多代碼。 –

回答

1

哇,答案竟然非常簡單。我用eachFileRecurse替換了eachDirRecurse,因此也消除了嵌套循環。非常感謝所有評論作者,他們的幫助讓我發現了這一點。

相關問題