2010-09-07 6 views

risposta

69

Questo dovrebbe risolvere il problema:

import static groovy.io.FileType.FILES 

new File('.').eachFileRecurse(FILES) { 
    if(it.name.endsWith('.groovy')) { 
     println it 
    } 
} 

eachFileRecurse prende un FileType enum che specifica che si è interessati solo nei file. Il resto del problema si risolve facilmente filtrando il nome del file. Vale la pena ricordare che eachFileRecurse ricorre normalmente su entrambi i file e le cartelle mentre eachDirRecurse trova solo le cartelle.

3

sostituire eachDirRecurse di eachFileRecurse e dovrebbe funzionare.

3
// Define closure 
def result 

findTxtFileClos = { 

     it.eachDir(findTxtFileClos); 
     it.eachFileMatch(~/.*.txt/) {file -> 
       result += "${file.absolutePath}\n" 
     } 
    } 

// Apply closure 
findTxtFileClos(new File(".")) 

println result 
+0

Lo snippet troveranno lo stesso file più volte. Per farlo funzionare dovrai usare eachDirRecurse e per ogni dir usare dir.eachFileMatch per trovare i file nella directory. Controlla la mia soluzione per un altro modo per risolvere il problema. – xlson

+0

nuovo approccio ... –

7

Groovy versione 2.4.7:

new File(pathToFolder).traverse(type: groovy.io.FileType.FILES) { it -> 
    println it 
} 

si può anche aggiungere filtri come

new File(parentPath).traverse(type: groovy.io.FileType.FILES, nameFilter: ~/patternRegex/) { it -> 
    println it 
}