Javaを知らないのでもっと良い方法があるのかもしれませんが、File.listFilesメソッドで指定ディレクトリの中にあるファイル、ディレクトリの一覧が取得できるそうです。指定ディレクトリの中身を漁るだけなら一行で書けました。
import java.io._ def ls1(dir: String) = { new File(dir).listFiles.foreach(println) }
ディレクトリ以下も見ていくなら:
def ls2(dir: String) : Unit = { new File(dir).listFiles.map { case f if f.isDirectory => ls2(f.getPath) case x => x } foreach { case f: File => println(f.getPath) case _ => } }
としましたが、foreachの中がキモい事に。Scalaでls - みずぴー日記を見るとflatMapが使えるようなので、真似して
def ls3(dir: String) { def ls(dir: String) : Seq[File] = { new File(dir).listFiles.flatMap { case f if f.isDirectory => ls(f.getPath) case x => List(x) } } ls(dir).foreach(println) }
という感じに。ディレクトリ名がprintされませんがまぁ気にしない。
def ls4(dir: String) : Unit = { def ls(dir: String) : Seq[File] = { new File(dir).listFiles.flatMap { case f if f.isDirectory => ls(f.getPath) case x => List(x) } } ls(dir).filter(_.getPath.endsWith(".cpp")).foreach(println) }
filterかませば任意の条件を満たすファイルだけを取れる、と。