2010-09-07 7 views

Antwort

69

Dies sollte Ihr Problem lösen:

import static groovy.io.FileType.FILES 

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

eachFileRecurse nimmt einen ENUM Dateityp, der, dass Sie in nur Dateien interessiert sind spezifiziert. Der Rest des Problems wird einfach gelöst, indem der Name der Datei gefiltert wird. Könnte erwähnen, dass eachFileRecurse normalerweise über Dateien und Ordner recursiert, während eachDirRecurse nur Ordner findet.

3

ersetzen eachDirRecurse von eachFileRecurse und es sollte funktionieren.

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

Ihr Snippet hinzufügen wird die gleiche Datei mehrmals finden. Damit es funktioniert, müssen Sie stattdessen jedesDirRecurse verwenden und für jedes Verzeichnis mit dir.eachFileMatch die Dateien im Verzeichnis suchen. Überprüfen Sie meine Lösung auf eine andere Möglichkeit, das Problem zu lösen. – xlson

+0

neuer Ansatz ... –

7

groovy Version 2.4.7:

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

können Sie auch Filter wie

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