CSVを読み書きするライブラリ「opencsv」のラッパークラス

opencsv の CSVReader をラップして、CSVの1レコードずつ返す Iterator クラス。

import java.io._
import au.com.bytecode.opencsv.CSVReader

class ScalaCSVReader(reader: Reader) extends Iterator[Array[String]] with Closeable {
    require(reader != null)
    private val csv = new CSVReader(reader)
    private var nextRow = csv.readNext
    override def hasNext = nextRow != null
    override def next = try { nextRow } finally { nextRow = csv.readNext }
    override def close { csv.close }
}

使用例

val reader = new ScalaCSVReader(new FileReader("in.csv"))
val rows: List[Array[String]] = try { reader.toList } finally { reader.close }