Получить список всех файлов в директории (рекурсивно)


Я пытаюсь сделать (не печатать, это легко) список файлов в каталоге и его подкаталогах.

Я пробовал:

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 80

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
}