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


湖上湖
浏览 405回答 3
3回答

一只萌萌小番薯

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"

互换的青春

这在scala 2.9中可能也不起作用,也许在2.8中也不行)使用中继线:scala> io.File("/etc/passwd").slurpres0: String = ### User Database# ... etc
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python