テキストファイルをオープンして内容を出力する
(この記事は Scala Advent Calendar jp 2010 : ATND の8日目です。)
「scala.io.Source.fromFile」というのがあってそれが使えそうだった。
val filename = "test.txt" scala.io.Source.fromFile(filename).getLines.foreach(println)
おおお簡単!と思ったんだけど、自動ではcloseしてくれないよね。
仕方なく自分でcloseする。
val filename = "test.txt" val source = scala.io.Source.fromFile(filename) try { source.getLines.foreach(println) } finally { source.close }
毎回これ書くのはめんどくさい。scalaが俺にユーティリティ関数を作れと囁いている。
def getLinesFromFile(filename: String, f:(String) => Unit) = { val source = scala.io.Source.fromFile(filename) try { source.getLines.foreach(f) } finally { source.close } } getLines("test.txt", println)
第一引数がファイル名、第二引数が実行させたい関数です。
で、scala.io.Sourceのソース読んだけど、FileInputStreamをラップしているような感じですね。
ただいま有志が逆引きScalaというTips集を作成しています。まだネタ不足気味なので、何かいいネタがあったら教えて下さい。
追記:こう書いた方がいいんじゃないかって話戴きました。ありがとうございます。自動的に閉じるSource - ( ꒪⌓꒪) ゆるよろ日記
- LoanPattern使って書く
- Iteratorに対して、そもそもSource自身が最後まで読んだら自動的に閉じる