디렉토리의 모든 파일 목록 가져 오기 (재귀 적)


93

디렉토리와 하위 디렉토리에있는 파일 목록을 가져 오려고합니다 (인쇄가 아니라 간단합니다).

난 노력 했어:

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

그러나 "파일"은 폐쇄 범위에서 인식되지 않습니다.

목록은 어떻게 얻습니까?

답변:


213

이 코드는 나를 위해 작동합니다.

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을 사용하려면 명시 적으로 가져와야합니다.
Chris Mountford 2013-06-28

4
FileType을 사용하려면 올바른 Groovy 버전을 사용해야합니다. "Groovy.io.FileType 클래스는 Groovy 버전 1.7.1에서 도입되었습니다." 참조 : stackoverflow.com/questions/6317373/…
Tidhar Klein Orbach

이것은 경로와 함께 폴더 이름을 표시했습니다. 예 : /tmp/directory1얻가 어떻게 directory1출력에 혼자
soundararajan.c

weird..this 내가이 함께 서문 경우에도 루트 경로를 제공 .그것은 간다/./path
light24bulbs

디렉토리에있는 모든 폴더를 어떻게 나열 할 수 있습니까?
Carlos Andres


6

다음은 build.gradle가져올 필요없이 Android 프로젝트 용 Gradle / Groovy에서 나를 위해 작동합니다 groovy.io.FileType(참고 : 하위 디렉터리를 재귀하지 않지만이 솔루션을 찾았을 때 더 이상 재귀에 대해 신경 쓰지 않으므로 둘 중 하나도 아닐 수 있습니다).

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

1
이것은 아마도 하위 디렉토리를 통해 반복되지는 않지만. 그러나 : 난독 파일을 분리 한 번 :)에 그들 모두를 가져 오기위한 나의 목적 일
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.