ディレクトリ内のすべてのファイルのリストを取得します(再帰的)


92

ディレクトリとそのサブディレクトリ内のファイルのリストを取得しようとしています(印刷ではなく、簡単です)。

私はもう試した:

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

ただし、「ファイル」はクロージャの範囲では認識されません。

リストを取得するにはどうすればよいですか?

回答:


212

このコードは私にとってはうまくいきます:

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
}

15
デフォルトでは、groovyはjava.ioをインポートしますが、groovy.ioはインポートしません。そのため、FileTypeを使用するには、明示的にインポートする必要があります。
クリスマウントフォード2013年

4
FileTypeを使用する場合は、正しいgroovyバージョンを使用してください。「クラスgroovy.io.FileTypeはGroovyバージョン1.7.1で導入されました。」参照:stackoverflow.com/questions/6317373/...
Tidharクラインオーバック

これは、フォルダ名とそのパスを表示していました。例:/tmp/directory1どのように取得するためのdirectory1出力に単独で
soundararajan.c

weird ..これは、私が.それの前にそれが付いていてもルートパスを与える/./path
light24bulbs

ディレクトリ上のすべてのフォルダを一覧表示するにはどうすればよいですか?
カルロスアンドレス

15

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


6

以下は、Gradle / Groovy for build.gradleAndroidプロジェクトで、インポートすることなく動作groovy.io.FileTypeします(注:サブディレクトリを再帰しませんが、この解決策を見つけたとき、私は再帰を気にしなくなったので、どちらでもかまいません)。

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

1
ただし、これはおそらくサブディレクトリを介して再帰しません。ただし、私の目的のために、proguardファイルを分離して一度にインポートするために機能しました:)
ChrisPrime

残念ながら、これは「ディレクトリ内のすべてのファイル(再帰的)」という質問には答えません。現在のディレクトリのみがリストされ、コンテキストで誤解を招く可能性があります。
ottago

fileTree再帰します。
Noel Yap

FileTreeディレクトリは含まれません(ファイルとして扱われません)。
DNAX

1

これは私が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
    }
}

リストの使用は、上記のIDEAから取得されました。上記のスクリプトの問題は、groovy.io.FileType.FILESをインポートする必要があることです。Gradleスクリプトはそれが好きではありません。したがって、ディレクトリが見つかったときに自分自身を呼び出すファイルを探すメソッドを作成しました。
Timothy Strunk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.