Получить список всех файлов в директории (рекурсивно)
Я пытаюсь сделать (не печатать, это легко) список файлов в каталоге и его подкаталогах.
Я пробовал:
def folder = "C:DevEnvProjectsGeneric";
def baseDir = new File(folder);
files = baseDir.listFiles();
Я получаю только каталоги. Я тоже пробовал:
def files = [];
def processFileClosure = {
println "working on ${it.canonicalPath}: "
files.add (it.canonicalPath);
}
baseDir.eachFileRecurse(FileType.FILES, processFileClosure);
но "файлы"не распознаются в области закрытия.
Как мне получить список?
3 ответа:
этот код работает для меня:
import groovy.io.FileType def list = [] def dir = new File("path_to_parent_dir") dir.eachFileRecurse (FileType.FILES) { file -> list << file }
после этого переменная list содержит все файлы (java.io. File) данного каталога и его подкаталогов:
list.each { println it.path }
новые версии 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
следующие работы для меня в Gradle / Groovy for
build.gradle
для проекта Android, без необходимости импортироватьgroovy.io.FileType
(примечание: не рекурсивные подкаталоги, но когда я нашел это решение, я больше не заботился о рекурсии, поэтому вы тоже не можете):FileCollection proGuardFileCollection = files { file('./proguard').listFiles() } proGuardFileCollection.each { println "Proguard file located and processed: " + it }