J'essaie d'obtenir (pas d'impression, c'est facile) la liste des fichiers d'un répertoire et de ses sous-répertoires.
J'ai essayé:
def folder = "C:\\DevEnv\\Projects\\Generic";
def baseDir = new File(folder);
files = baseDir.listFiles();
Je ne reçois que les annuaires. J'ai aussi essayé:
def files = [];
def processFileClosure = {
println "working on ${it.canonicalPath}: "
files.add (it.canonicalPath);
}
baseDir.eachFileRecurse(FileType.FILES, processFileClosure);
Mais "fichiers" n'est pas reconnu dans le cadre de la fermeture.
Comment puis-je obtenir la liste?
Ce code fonctionne pour moi:
import groovy.io.FileType
def list = []
def dir = new File("path_to_parent_dir")
dir.eachFileRecurse (FileType.FILES) { file ->
list << file
}
Ensuite, la variable de liste contient tous les fichiers (Java.io.File) du répertoire donné et ses sous-répertoires:
list.each {
println it.path
}
Les versions les plus récentes de Groovy (1.7.2+) offrent une extension JDK pour parcourir plus facilement les fichiers d’un répertoire, par exemple:
import static groovy.io.FileType.FILES
def dir = new File(".");
def files = [];
dir.traverse(type: FILES, maxDepth: 0) { files.add(it) };
Voir aussi [1] pour plus d'exemples.
[1] http://mrhaki.blogspot.nl/2010/04/groovy-goodness-traversing-directory.html
Ce qui suit fonctionne pour moi dans Gradle/Groovy pour build.gradle
pour un projet Android, sans avoir à importer groovy.io.FileType
(NOTE: Les sous-répertoires ne sont pas recurse, mais lorsque j’ai trouvé cette solution, je ne me souciais plus de la récursivité, vous ne pouvez donc pas non plus):
FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
println "Proguard file located and processed: " + it
}