CSVデータは作るのは簡単ですが、読み出す方は少し面倒です。データ部分がダブルクォートで括られていることもあれば、無いこともあります。CRLFと続いていれば行末ですが、単独のLFはセル内の改行です。またjava.io.BufferedReader#readLine()は単独のLFも改行とみなしてしまうのでそのままでは使えません。こうしたことを考慮すると、1文字ずつ読み出して調べるしかありません。あとの文字により意味が変わる文字があるので、1文字先読みも行う必要があります。
今回はできるだけ難しいことをやりたくないので、まず1行のデータを取り出し、その次にセルに分割するという手間をかけてみました。こうすると1つの行を2度スキャンすることになってしまうのですが、この程度なら許してもらえるオーバーヘッドかなと思います。
CsvReader.java