ディレクトリとそのサブディレクトリ内のファイルのリストを取得しようとしています(印刷ではなく、簡単です)。
私はもう試した:
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);
しかし、「ファイル」は閉鎖の範囲では認識されません。
リストを取得するにはどうすればよいですか?
このコードは私のために機能します:
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
}
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でAndroidプロジェクトのbuild.gradle
で動作し、groovy.io.FileType
をインポートする必要はありません(注:サブディレクトリを再帰しませんが、このソリューションを見つけたときは再帰を気にしなくなったので、次のいずれでもないかもしれません):
FileCollection proGuardFileCollection = files { file('./proguard').listFiles() }
proGuardFileCollection.each {
println "Proguard file located and processed: " + it
}