Scalaでファイル全体を読み取りますか?質問する

Scalaでファイル全体を読み取りますか?質問する

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()

ベストアンサー1

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()

上記のコードのもう 1 つの問題は、実装のせいで非常に遅いことです。ファイルが大きい場合は、次のようにします。

source.getLines mkString "\n"

おすすめ記事