在Scala中将整个文件读入内存的简单而规范的方法是什么?(理想情况下,可以控制字符编码。)我能想到的最好的是:scala.io.Source.fromPath("file.txt").getLines.reduceLeft(_+_)还是我应该使用Java令人敬畏的惯用法之一,最好的用法是(不使用外部库):import java.util.Scannerimport java.io.Filenew Scanner(new File("file.txt")).useDelimiter("\\Z").next()通过阅读邮件列表讨论,我不清楚scala.io.Source甚至应该是规范的I / O库。我不明白它的预期目的是什么。...我想要一些简单易记的东西。例如,在这些语言中,很难忘记惯用语...Ruby open("file.txt").readRuby File.read("file.txt")Python open("file.txt").read()
3 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
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"
互换的青春
TA贡献1797条经验 获得超6个赞
这在scala 2.9中可能也不起作用,也许在2.8中也不行)
使用中继线:
scala> io.File("/etc/passwd").slurp
res0: String =
##
# User Database
#
... etc
添加回答
举报
0/150
提交
取消