Groovy 在 Java IO 上封装了一层实现,使得文件操作更加简单顺手。linux文件系统里面,文件有dir和file的区别,同样得,groovy在遍历文件的时候也有这种定义。为了满足递归获取dir下的所有file,groovy很友好的给出了ANY的类型表示即遍历dir,也遍历file。 值得注意的是,dir和file类型都由Java抽象成了 File 类
/**
* Represents particular files of interest.
*/
public enum FileType {
/** Represents normal files */
FILES,
/** Represents directories */
DIRECTORIES,
/** Represents both normal files and directories */
ANY
}
import static groovy.io.FileType.DIRECTORIES
import static groovy.io.FileType.FILES
import static groovy.io.FileType.ANY

File topDir = new File('E:\\project\\placeholder-reader\\src\\top')
// 在多级目录中爬取指定后缀名的文件
topDir.eachFileRecurse(FILES) {
if(it.name.endsWith('.groovy')) {
println it.name
}
}

File topDir = new File('E:\\project\\placeholder-reader\\src\\top')
// 只要first_dir目录下的所有文件
topDir.eachFileRecurse(DIRECTORIES) {file ->
if (file.name == 'first_dir') {
file.eachFileRecurse(ANY) { innerFile ->
println innerFile.name
}
}
}

File topDir = new File('E:\\project\\placeholder-reader\\src\\top')
topDir.eachFileRecurse(DIRECTORIES) {file ->
if (file.name == 'first_dir') {
file.eachFileRecurse(DIRECTORIES) { innerDir ->
if (innerDir.name != 'first_dir_first_dir') {
innerDir.eachFileRecurse { innerFile ->
println innerFile.name
}
}
}
}
}
创建一个形如Java Pattern 的对象 (= 和 ~ 中间有一个空格)
pattern = ~"[Gg]roovy"
用 pattern 匹配 text, 获取 Matcher 对象
matcher= text ~= 'Groovy is Hip'
matcher 证明text 可以命中pattern
if (matcher) {
// 匹配成功
}
groovy 包了一层遍历实现, 可以把正则表达式中的分组信息依次遍历。形如 /(?=${)(${)(.*?)(?=})(})/ 匹配的三个分组都能依次遍历到
matcher.each {println it}
精确匹配
matcher = text ~== 'Groovy is Hip'

想要递归文件的时候,记得可以递归嵌套递归,这样子几乎能实现大部分文件遍历的需求。