BufferedReaderをScalaから使おうとすると、例えば以下の様になりますね。
val sb = new StringBuilder var line = br.readLine while(line!=null) { sb.append(line).append(System.lineSeparator) line = br.readLine } sb.toString
あまりにもScalaっぽくないので、implicit classを用いてIterableにしてみます。
implicit class IterableBufferedReader(br: BufferedReader) extends Iterable[String] { def iterator: Iterator[String] = Iterator.continually(br.readLine).takeWhile(_ != null) } br.mkString(System.lineSeparator)
Loan Patternと組み合わせるともっとシンプルですね。
def using[A](br: BufferedReader)(body: Iterator[String] => A): A = { try { body(Iterator.continually(br.readLine).takeWhile(_ != null)) } finally { br.close } } using(br) ( _.mkString(System.lineSeparator) )