技术开发 频道

实战 Groovy: for each 剖析

  目录迭代

  使用 Groovy 代替 shell 脚本(或批处理脚本)非常容易,因为您能够方便地访问文件系统。要获得当前目录的目录列表,参见清单 21:

  清单 21. 目录迭代  

def dir = new File(".")

  dir.eachFile{file
->

  println file

  }

  eachFile() 方法同时返回了文件和子目录。使用 Java 语言的 isFile() 和 isDirectory() 方法,可以完成更复杂的事情。清单 22 展示了一个例子:

  清单 22. 分离文件和目录  

def dir = new File(".")

  dir.eachFile{file
->

  
if(file.isFile()){

  println
"FILE: ${file}"

  }
else if(file.isDirectory()){

  println
"DIR: ${file}"

  }
else{

  println
"Uh, I'm not sure what it is..."

  }

  }

  由于两种 Java 方法都返回 boolean 值,可以在代码中添加一个 Java 三元操作符。清单 23 展示了一个例子:

  清单 23. 三元操作符  

def dir = new File(".")

  dir.eachFile{file
->

  println file.isDirectory() ?
"DIR: ${file}" : "FILE: ${file}"

  }

  如果只对目录有兴趣,那么可以使用 eachDir() 而不是 eachFile()。还提供了 eachDirMatch() 和 eachDirRecurse() 方法。

  可以看到,对 File 仅使用 each() 方法并不能提供足够的含义。典型 each() 方法的语义保存在 File 中,但是方法名更具有描述性,从而提供更多有关这个高级功能的信息。

0
相关文章