Вопрос:
Вопрос с новичком:
Я пытаюсь получить (не печатать, так просто) список файлов в каталоге и его подкаталогах.
Я пробовал:
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);
но “файлы” не распознаются в области закрытия.
Как мне получить список?
Лучший ответ:
Этот код работает для меня:
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 } Ответ №1
В случае, если это помогает кому-либо еще, для меня в Gradle/Groovy работает для проекта build.gradle для Android, без необходимости импортировать groovy.io.FileType(ПРИМЕЧАНИЕ: не рекурсирует подкаталоги но когда я нашел это решение, я больше не заботился о рекурсии, так что вы тоже не можете):
FileCollection proGuardFileCollection = files { file(‘./proguard’).listFiles() } proGuardFileCollection.each { println «Proguard file located and processed: » + it } Ответ №2
Более новые версии 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