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

Posted

技术标签:

【中文标题】在 Groovy 中递归列出与特定文件类型匹配的所有文件【英文标题】:Recursive listing of all files matching a certain filetype in Groovy 【发布时间】:2011-04-09 09:29:02 【问题描述】:

我正在尝试递归地列出与 Groovy 中特定文件类型匹配的所有文件。 This example 几乎做到了。但是,它不会列出根文件夹中的文件。有没有办法修改它以列出根文件夹中的文件?或者,有其他方法吗?

【问题讨论】:

【参考方案1】:

eachDirRecurse 替换为eachFileRecurse,它应该可以工作。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:
// Define closure
def result

findTxtFileClos = 

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

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

println result

【讨论】:

您的 sn-p 会多次找到同一个文件。要使其工作,您将不得不使用 eachDirRecurse 代替,并且对于每个目录,使用 dir.eachFileMatch 来查找目录中的文件。检查我的解决方案以找到解决问题的另一种方法。【参考方案4】:

这应该可以解决您的问题:

import static groovy.io.FileType.FILES

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

eachFileRecurse 采用枚举 FileType 指定您只对文件感兴趣。剩下的问题很容易通过过滤文件名来解决。可能值得一提的是,eachFileRecurse 通常会在文件和文件夹上递归,而eachDirRecurse 只查找文件夹。

【讨论】:

以上是关于在 Groovy 中递归列出与特定文件类型匹配的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

如何递归删除PowerShell中的所有空文件夹?

如何在 Google BigQuery 中列出与特定名称匹配的表?

如何在 Go 中列出所有匹配的进程? [关闭]

在Unix中递归列出文件中的所有文件? [复制]

如何使用 gsutil 命令列出 gcs 存储桶中的所有文件(包含所有文件夹)以匹配文件内容中的特定字符串

Java & Groovy & Scala & Kotlin - 20.Switch 与模式匹配