Próbuję uzyskać (nie drukować, to proste) listę plików w katalogu i jego podkatalogach.
Próbowałem:
def folder = "C:\\DevEnv\\Projects\\Generic";
def baseDir = new File(folder);
files = baseDir.listFiles();
Dostaję tylko katalogi. Próbowałem też:
def files = [];
def processFileClosure = {
println "working on ${it.canonicalPath}: "
files.add (it.canonicalPath);
}
baseDir.eachFileRecurse(FileType.FILES, processFileClosure);
Ale „pliki” nie są rozpoznawane w zakresie zamknięcia.
Jak uzyskać listę?
file
groovy
directory-listing
Yossale
źródło
źródło
/tmp/directory1
Jak zdobyćdirectory1
samotność na wyjściu.
It/./path
Nowsze wersje Groovy (1.7.2+) oferują rozszerzenie JDK, aby łatwiej przechodzić przez pliki w katalogu, na przykład:
import static groovy.io.FileType.FILES def dir = new File("."); def files = []; dir.traverse(type: FILES, maxDepth: 0) { files.add(it) };
Więcej przykładów można znaleźć w [1].
[1] http://mrhaki.blogspot.nl/2010/04/groovy-goodness-traversing-directory.html
źródło
Poniższe działa dla mnie w Gradle / Groovy dla
build.gradle
projektu Android, bez konieczności importowaniagroovy.io.FileType
(UWAGA: podkatalogi nie powtarzają się, ale kiedy znalazłem to rozwiązanie, nie przejmowałem się już rekurencją, więc możesz też nie):FileCollection proGuardFileCollection = files { file('./proguard').listFiles() } proGuardFileCollection.each { println "Proguard file located and processed: " + it }
źródło
fileTree
powtarza się.FileTree
nie obejmuje katalogów (nie traktuje ich jako plików).Oto, co wymyśliłem dla skryptu kompilacji 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 } }
źródło