Groovy中递归列出所有匹配特定文件类型的文件

42

我正在尝试使用Groovy递归列出所有匹配特定文件类型的文件。这个示例几乎可以实现。但它不会列出根文件夹中的文件。有没有办法修改它以列出根文件夹中的文件?或者,是否有其他方法可以做到这一点?

4个回答

109
这应该能解决你的问题:
import static groovy.io.FileType.FILES

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

eachFileRecurse接受一个枚举类型 FileType,用于指定你只对文件感兴趣。问题的其余部分通过过滤文件名轻松解决。值得一提的是,eachFileRecurse通常递归查找文件和文件夹,而eachDirRecurse仅查找文件夹。


27

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
}

6
// Define closure
def result

findTxtFileClos = {

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

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

println result

1
你的代码片段会多次找到同一个文件。为了让它正常工作,你需要使用eachDirRecurse来遍历每个目录,并使用dir.eachFileMatch在目录中查找文件。请查看我的解决方案,另一种解决问题的方法。 - xlson

4

eachDirRecurse替换为eachFileRecurse,它就能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接