我正试图获取(不打印,这很容易)目录及其子目录中的文件列表。
我试过了:
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);
但是在封闭的范围内无法识别“文件”。
如何获取列表?
答案 0 :(得分:195)
此代码适用于我:
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
}
答案 1 :(得分:11)
较新版本的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
答案 2 :(得分:6)
以下适用于Gradle / Groovy for build.gradle
的Android项目,无需导入groovy.io.FileType
(注意:不会递归子目录,但是当我找到这个解决方案时,我不再关心关于递归,所以你可能也不会):
FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
println "Proguard file located and processed: " + it
}
答案 3 :(得分:1)
这是我为gradle构建脚本想到的:
<column>