#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本