Groovy: получить список всех файлов в каталоге (рекурсивный)
Вопрос с новичком:
Я пытаюсь получить (не печатать, так просто) список файлов в каталоге и его подкаталогах.
Я пробовал:
def folder = "C:\\DevEnv\\Projects\\Generic";
def baseDir = new File(folder);
files = baseDir.listFiles();
но я получаю только dirs. Я также пробовал
def files = [];
def processFileClosure = {
println "working on ${it.canonicalPath}: "
files.add (it.canonicalPath);
}
baseDir.eachFileRecurse(FileType.FILES, processFileClosure);
но "файлы" не распознаются в области закрытия.
Как мне получить список?
Ответы
Ответ 1
Этот код работает для меня:
import groovy.io.FileType
def list = []
def dir = new File("path_to_parent_dir")
dir.eachFileRecurse (FileType.FILES) { file ->
list << file
}
Затем переменная списка содержит все файлы (java.io.File) данного каталога и его подкаталоги:
list.each {
println it.path
}
Ответ 2
В случае, если это помогает кому-либо еще, для меня в Gradle/Groovy работает для проекта build.gradle для Android, без необходимости импортировать groovy.io.FileType(ПРИМЕЧАНИЕ: не рекурсирует подкаталоги но когда я нашел это решение, я больше не заботился о рекурсии, так что вы тоже не можете):
FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
println "Proguard file located and processed: " + it
}
Ответ 3
Более новые версии Groovy (1.7.2+) предлагают расширение JDK для более легкого перемещения по файлам в каталоге, например:
import static groovy.io.FileType.FILES
def dir = new File(".");
def files = [];
dir.traverse(type: FILES, maxDepth: 0) { files.add(it) };
См. также [1] для получения дополнительных примеров.
[1] http://mrhaki.blogspot.nl/2010/04/groovy-goodness-traversing-directory.html