Я пытаюсь получить (не распечатать, это просто) список файлов в каталоге и его подкаталогах.
Я пытался:
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);
Но «файлы» не распознаются в рамках закрытия.
Как мне получить список?
file
groovy
directory-listing
Йосале
источник
источник
/tmp/directory1
Как сделать так, чтобы наdirectory1
выходе было только одно.
/./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
build.gradle
для проекта Android без необходимости импортаgroovy.io.FileType
(ПРИМЕЧАНИЕ: не рекурсивно подкаталоги, но когда я нашел это решение, я больше не заботился о рекурсии, поэтому вы тоже можете не беспокоиться):FileCollection proGuardFileCollection = files { file('./proguard').listFiles() } proGuardFileCollection.each { println "Proguard file located and processed: " + it }
источник
fileTree
рекурсии.FileTree
не включает каталоги (не обрабатывает их как файлы).Вот что я придумал для скрипта сборки gradle:
task doLast { ext.FindFile = { list, curPath -> def files = file(curPath).listFiles().sort() files.each { File file -> if (file.isFile()) { list << file } else { list << file // If you want the directories in the list list = FindFile( list, file.path) } } return list } def list = [] def theFile = FindFile(list, "${project.projectDir}") list.each { println it.path } }
источник