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