2017-08-09 13 views
0

は、私は特定の名前を持つ指定されたディレクトリに再帰的にファイルのJavaテストファイルを見つけるために、Groovyでスクリプトを書いて、コードの関係部分は次のとおりです。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と一致しますが、Windows 7のCygwinまたはWindows 7のエクスプローラright click -> New -> Text Documentオプションを使用してtouch dummyTestCase.javaコマンドを使用して新しいものを作成し、TestDummy.javaのような名前に変更しても、新しい名前を見つけられません。このスクリプトはまた、それぞれのファイルのコピーを同じ方法で扱う。すなわち、既に存在する古いファイルのコピーを見つけるが、私が作成した新しいファイルはコピーしない。私は新しく作成されたファイルに対しては最大限のファイル権限を開いていましたが、変更はありませんでした。 Cygwin経由のBASH findコマンドは、常に問題なくすべてのファイルを検索します。スクリプトが正しいディレクトリで探している診断印刷ステートメントを使用して確認しました。私は、スクリプトでいくつかのファイルを作成し、正しい場所に作成されたことを確認することでこれを確認しました。

+0

あなたの発見ファイルのコードを表示できますか? – aristotll

+0

ディレクトリからファイルをロードするコードを記述できますか?大文字小文字に問題がなければ、通常は上記の問題はありません。 –

+0

@aristotllもっとコードを表示するために質問を編集します。 –

答えて

1

うわー、答えは驚くほど簡単であることが判明しました。私はeachDirRecurseeachFileRecurseに置き換え、入れ子にしたループも削除しました。助けを借りてこの発見につながったすべてのコメント作成者に感謝します。

関連する問題