Получить список всех файлов в каталоге (рекурсивно) - PullRequest
87 голосов
/ 17 октября 2010

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

Я пробовал:

def folder = "C:\\DevEnv\\Projects\\Generic";
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 ]

198 голосов
/ 17 октября 2010

Этот код работает для меня:

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
}
12 голосов
/ 22 июля 2016

Более новые версии 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

6 голосов
/ 28 апреля 2016

Следующее работает для меня в Gradle / Groovy для build.gradle для проекта Android без необходимости импорта groovy.io.FileType (ПРИМЕЧАНИЕ. Подкаталоги не восстанавливаются, но когда я нашел это решение, я больше не заботился о рекурсии, поэтому Вы также не можете):

FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
    println "Proguard file located and processed: " + it
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...