2012年8月19日日曜日

NIO2で再帰的にファイルを扱う方法

Files.walkFileTreeメソッドを使用して、従来のjava.io.Fileを使う時よりも簡単にディレクトリを再帰的にたどってファイルを扱える。

下のコードだと、ディレクトリを再帰的にたどっていって、拡張子が「.groovy」の場合に標準出力にファイル名(フルパス)を出力しています。
import java.nio.file.*
import java.nio.file.attribute.BasicFileAttributes

def dir = Paths.get("../..")
Files.walkFileTree(dir, new FileVisitor());

class FileVisitor extends SimpleFileVisitor {
  @Override
  FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
    if (file.toString().endsWith(".groovy")) {
      println "groovyファイル:${file.toAbsolutePath().normalize()}"
    }
    return FileVisitResult.CONTINUE
  }
}