Рекурсивный список всех файлов, соответствующих определенному типу файлов в Groovy - PullRequest
36 голосов
/ 07 сентября 2010

Я пытаюсь рекурсивно перечислить все файлы, которые соответствуют определенному типу файлов в Groovy. Этот пример почти делает это. Тем не менее, он не перечисляет файлы в корневой папке. Есть ли способ изменить это, чтобы список файлов в корневой папке? Или есть другой способ сделать это?

Ответы [ 4 ]

82 голосов
/ 08 сентября 2010

Это должно решить вашу проблему:

import static groovy.io.FileType.FILES

new File('.').eachFileRecurse(FILES) {
    if(it.name.endsWith('.groovy')) {
        println it
    }
}

eachFileRecurse принимает перечисление FileType, которое указывает, что вас интересуют только файлы.Остальная часть проблемы легко решается путем фильтрации по имени файла.Стоит упомянуть, что eachFileRecurse обычно рекурсивно обрабатывает как файлы, так и папки, в то время как eachDirRecurse находит только папки.

15 голосов
/ 11 августа 2016

Groovy версия 2.4.7:

new File(pathToFolder).traverse(type: groovy.io.FileType.FILES) { it ->
    println it
}

Вы также можете добавить фильтр как

new File(parentPath).traverse(type: groovy.io.FileType.FILES, nameFilter: ~/patternRegex/) { it ->
    println it
}
4 голосов
/ 08 сентября 2010
// Define closure
def result

findTxtFileClos = {

        it.eachDir(findTxtFileClos);
        it.eachFileMatch(~/.*.txt/) {file ->
                result += "${file.absolutePath}\n"
        }
    }

// Apply closure
findTxtFileClos(new File("."))

println result
4 голосов
/ 08 сентября 2010

замените eachDirRecurse на eachFileRecurse, и оно должно работать.

...