ScalaっぽくBufferedReaderを使う

Tomoumi Nishimura 105views 更新:2016年2月12日

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) )

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません