1. ホーム
  2. scala

[解決済み] Scalaでファイル全体を読む?

2022-03-16 20:38:57

質問

Scalaでファイル全体をメモリに読み込むための、シンプルで標準的な方法は何ですか? (理想は、文字エンコーディングを制御できることです)。

私が思いつくベストは

scala.io.Source.fromPath("file.txt").getLines.reduceLeft(_+_)

のいずれかを使用することになるのでしょうか? Java の神がかったイディオム 外部ライブラリを使用しない場合)最も優れているのは、以下のようなものだと思われます。

import java.util.Scanner
import java.io.File
new Scanner(new File("file.txt")).useDelimiter("\\Z").next()

メーリングリストの議論を読んでいると、scala.io.Sourceが標準的なI/Oライブラリであるはずだということさえ、私にはよくわかりません。 その意図された目的が何なのか、正確には理解できないのです。

... シンプルで覚えやすいものがいい。 たとえば、これらの言語では、「...」という慣用句を忘れると大変なことになります。

Ruby    open("file.txt").read
Ruby    File.read("file.txt")
Python  open("file.txt").read()

解決方法は?

val lines = scala.io.Source.fromFile("file.txt").mkString

ところで、" scala. もちろん、io の内容を全部または部分的にインポートして、 "io." も前置修飾する必要はありません。

しかし、上記ではファイルを開いたままにしています。問題を避けるために、このようにファイルを閉じてください。

val source = scala.io.Source.fromFile("file.txt")
val lines = try source.mkString finally source.close()

上記のコードのもう一つの問題は、その実装の性質上、恐ろしく遅いということです。より大きなファイルには、以下のものを使うべきです。

source.getLines mkString "\n"