#12 Scalaで学ぶファイル読み書きの基本
Scalaのファイル操作は、JVM言語らしくJavaの機能を活用しつつ、Scala独自の書き方も用意されています。この記事では、Scalaにおけるファイル操作の基本を解説します。
ファイルを読み込む
import scala.io.Source
val content = Source.fromFile("data.txt").mkString
println(content)
`mkString`を使わず、1行ずつ処理したい場合は`getLines()`が便利です。
val source = Source.fromFile("data.txt")
for (line <- source.getLines()) {
println(line)
}
source.close()
ファイルに書き込む
Scalaには書き込み専用の手軽な機能があまり用意されておらず、Javaの機能を借りるのが一般的です。
import java.io.PrintWriter
val writer = new PrintWriter("data.txt")
writer.write("こんにちは")
writer.close()
既存の内容に追記したい場合は、`java.io.FileWriter`を第2引数`true`(追記モード)で指定して`PrintWriter`に渡す方法が使われます。
import java.io.FileWriter
val appendWriter = new PrintWriter(new FileWriter("data.txt", true))
appendWriter.write("追加の行\n")
appendWriter.close()
Usingでリソースを安全に扱う
Scala 2.13以降では、`scala.util.Using`という仕組みを使うことで、ファイルを開いたあとの`close()`忘れを防げます。
import scala.util.Using
Using(Source.fromFile("data.txt")) { source =>
source.getLines().foreach(println)
}
`Using`のブロックを抜けるタイミングで、成功・失敗に関わらず自動的にリソースが閉じられます。Pythonの`with`に近い役割を持つ仕組みだと考えると理解しやすいでしょう。
Scalaならではの注意点
`Source.fromFile`で開いたファイルは、使い終わったら`close()`を呼び出して明示的に閉じる必要があります。Pythonの`with`のような自動で閉じる仕組みが標準では用意されていないため、閉じ忘れに注意しましょう。前述の`Using`を積極的に使うことで、この閉じ忘れというありがちなミスを防げます。またファイルが存在しない場合、`Source.fromFile`は`FileNotFoundException`を投げるため、存在確認が必要な場面では`Try`や事前の`exists`チェックと組み合わせるとよいでしょう。
まとめ
Scalaのファイル読み込みは`Source.fromFile`が基本で、書き込みはJavaの機能を活用します。`Using`を使えばファイルを閉じる処理を安全に自動化でき、閉じ忘れという典型的なミスを防げます。
本ページはプロモーションを含みます。
参考書籍(PR)
Scalaをもっと学びたい方には「実践Scala入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿