在许多例子中,描述的是你可以使用scala.io.Source读取整个文件是这样的:什么是使用scala.io.Source的正确方法?
val str = scala.io.Source.fromFile("test.txt").mkString()
但关闭底层流没有提及。 为什么Scala不提供一个方便的方法来实现这一点,比如Python中的clause?它看起来很有用但并不难。
是否还有其他更好的方法可以在Scala中安全地执行该操作,我的意思是读取整个文件?
在许多例子中,描述的是你可以使用scala.io.Source读取整个文件是这样的:什么是使用scala.io.Source的正确方法?
val str = scala.io.Source.fromFile("test.txt").mkString()
但关闭底层流没有提及。 为什么Scala不提供一个方便的方法来实现这一点,比如Python中的clause?它看起来很有用但并不难。
是否还有其他更好的方法可以在Scala中安全地执行该操作,我的意思是读取整个文件?
斯卡拉的io
库只是为了提供有限需求的支持而完成的。曾经努力为斯卡拉提供一个精心思考的io库,该库目前在assembla上托管,同时还有一个github存储库。
如果您打算使用I/O来读取短期流程中的偶然文件,最好使用Java库或查看编译器中当前可用的I/O支持这将需要scala-compiler.jar与应用程序一起分发)。
至于自动资源管理,请看this question或this library(该问题在该问题的接受答案中有所提及)。
你还会推荐2016年不使用scala.io吗? – knub 2016-03-11 13:08:45
@knub我没有看Scala 2.12,看看有没有改进,但是,否则,是的,我坚持相同的建议。 – 2016-03-16 03:48:16
为了完整
val testTxtSource = scala.io.Source.fromFile("test.txt")
val str = testTxtSource.mkString()
testTxtSource.close()
起见应该把事情做好。
我建议using the using,这使得你的代码更简洁,更可靠
using(Source.fromFile("test.txt")){ _.mkString()}
它是使用权来源这种方式不关闭底层流? – woods 2010-12-17 05:13:09
如果您阅读scala.io.Source的代码,您会发现实际上它会将关闭基础流的工作留给您。惊人! – woods 2010-12-22 07:57:02