Рекурсивный список всех файлов, соответствующих определенному типу файлов в Groovy

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


person shikarishambu    schedule 07.09.2010    source источник


Ответы (4)


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

import static groovy.io.FileType.FILES

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

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

person xlson    schedule 08.09.2010

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
}
person Toumi    schedule 11.08.2016

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

person Riduidel    schedule 07.09.2010

person    schedule
comment
Ваш фрагмент найдет один и тот же файл несколько раз. Чтобы заставить его работать, вам придется вместо этого использовать eachDirRecurse, а для каждого каталога использовать dir.eachFileMatch, чтобы найти файлы в каталоге. Посмотрите мое решение, чтобы узнать о другом способе решения проблемы. - person xlson; 08.09.2010