如何在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
相关产品推荐
相关产品推荐

