groovy 获取目录中所有文件的列表(递归)

cyvaqqii  于 2022-11-01  发布在  其他
关注(0)|答案(5)|浏览(546)

我试图获取(不是打印,这很容易)目录及其子目录中的文件列表。
我试过了:

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);

但“案卷”不在结案范围之内。
我怎么拿到名单?

zzwlnbp8

zzwlnbp81#

以下代码对我有效:

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
}
2fjabf4q

2fjabf4q2#

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](http://mrhaki.blogspot.nl/2010/04/groovy-goodness-traversing-directory.html)

suzh9iv8

suzh9iv83#

以下代码适用于我在Gradle / Groovy for build.gradle中的Android项目,无需导入groovy.io.FileType(注意:不递归子目录,但当我发现这个解决方案时,我不再关心递归,所以你可能也不会):

FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
    println "Proguard file located and processed: " + it
}
nwo49xxi

nwo49xxi4#

这是我为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
    }
}
7jmck4yq

7jmck4yq5#

使用KotlinGradle脚本,可以这样做:

// ...
val yamls = layout.files({
    file("src/main/resources/mixcr_presets").walk()
        .filter { it.extension == "yaml" }
        .toList()
})
// ...

相关问题