You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy中列出文件集及搜索特定后缀文件(如ls *.doc)

嘿,关于Groovy里的文件操作,我给你整理了几种实用的方法,刚好对应你的两个问题!

在Groovy中列出一组文件

Groovy对Java的File类做了不少增强,文件遍历操作比Java简洁很多,这里分享几个常用姿势:

1. 递归遍历所有文件(包含子目录)

如果需要把目录下所有层级的文件都列出来,用eachFileRecurse就很方便:

def targetDir = new File("/你/的/目录/路径")
targetDir.eachFileRecurse { file ->
    println "文件路径:${file.absolutePath}"
}

要是只想看文件(排除文件夹),可以加个判断:

targetDir.eachFileRecurse { file ->
    if (file.isFile()) {
        println "文件名:${file.name}"
    }
}

2. 只列出当前目录的文件/文件夹

如果不需要深入子目录,用eachFile方法就够了:

def targetDir = new File("/你/的/目录/路径")
targetDir.eachFile { item ->
    println "${item.isDirectory() ? '文件夹' : '文件'}:${item.name}"
}
查找特定格式结尾的文件(类似ls *.doc)

要实现像ls *.doc这样的后缀匹配,Groovy有几种优雅的写法,挑适合你的用:

1. 基础后缀判断法

最直观的方式就是在遍历的时候检查文件名后缀:

def targetDir = new File("/你/的/目录/路径")
targetDir.eachFile { file ->
    if (file.isFile() && file.name.endsWith(".doc")) {
        println "找到DOC文件:${file.name}"
    }
}

2. 正则表达式匹配(更灵活)

如果需要匹配更复杂的后缀规则(比如区分.doc和.docx),用正则表达式会更灵活:

def targetDir = new File("/你/的/目录/路径")
targetDir.eachFile { file ->
    if (file.isFile() && file.name ==~ /.*\.doc$/) {
        // 这个正则只会匹配以.doc结尾的文件,不会包含.docx
        println "找到DOC文件:${file.name}"
    }
}

3. 直接获取匹配的文件数组

要是你想直接得到所有符合条件的文件对象列表,方便后续操作,用listFiles配合闭包过滤器:

def targetDir = new File("/你/的/目录/路径")
def docFiles = targetDir.listFiles { file ->
    file.isFile() && file.name.endsWith(".doc")
}

// 后续可以直接操作这个数组
if (docFiles) {
    println "找到${docFiles.size()}个DOC文件:"
    docFiles.each { println it.name }
} else {
    println "没有找到DOC文件"
}

内容的提问来源于stack exchange,提问作者Who

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:00:26