在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()
还有一个:https://github.com/pathikrit/better-files#streams-and-codecs
有多种方法可以在不将内容加载到内存的情况下获取文件:
val bytes : Iterator[Byte] = file.bytes
val chars : Iterator[Char] = file.chars
val lines : Iterator[String] = file.lines
val source : scala.io.BufferedSource = file.content
你也可以为任何执行读/写操作的东西提供你自己的编解码器(如果你没有提供,它会假设scala.io.Codec.default):
val content: String = file.contentAsString // default codec
// custom codec:
import scala.io.Codec
file.contentAsString(Codec.ISO8859)
//or
import scala.io.Codec.string2codec
file.write("hello world")(codec = "US-ASCII")
还有一个:https://github.com/pathikrit/better-files#streams-and-codecs
有多种方法可以在不将内容加载到内存的情况下获取文件:
val bytes : Iterator[Byte] = file.bytes
val chars : Iterator[Char] = file.chars
val lines : Iterator[String] = file.lines
val source : scala.io.BufferedSource = file.content
你也可以为任何执行读/写操作的东西提供你自己的编解码器(如果你没有提供,它会假设scala.io.Codec.default):
val content: String = file.contentAsString // default codec
// custom codec:
import scala.io.Codec
file.contentAsString(Codec.ISO8859)
//or
import scala.io.Codec.string2codec
file.write("hello world")(codec = "US-ASCII")