为什么Scala Source不关闭底层的InputStream?
发布时间:2020-12-16 09:32:56 所属栏目:安全 来源:网络整理
导读:我使用Scala Source.fromFile,但是一旦读取文件,我似乎找不到一个很好的方法来关闭底层的InputStream。 这是我的代码将失败与AssertionError因为该文件不能被删除。 def main(args : Array[String]) : Unit = { val myFile = new File("c:/tmp/doodah.txt"
我使用Scala Source.fromFile,但是一旦读取文件,我似乎找不到一个很好的方法来关闭底层的InputStream。
这是我的代码将失败与AssertionError因为该文件不能被删除。 def main(args : Array[String]) : Unit = { val myFile = new File("c:/tmp/doodah.txt") var src = Source.fromFile(myFile) src.getLines.foreach(l => print(l)) val deleted: Boolean = myFile.delete assert (deleted,"File was not deleted - maybe the stream hasn't been closed in Source") } Source有一个叫做reset的方法,但是所有这些都是从文件中重新创建源。 内部源创建一个具有密切方法的底层BufferedSource。但是这并不是从Source公开的。 我希望Source会在文件的内容被读取后释放文件句柄,但似乎并没有这样做。 到目前为止,我看到的最好的解决方法是将Source投入到BufferedSource并调用close。 try { src.getLines.foreach(l => print(l)) } finally src match { case b: scala.io.BufferedSource => b.close } 或者,我可以从InputStream创建一个源,并自己管理关闭。 但这似乎有点脏。使用Source时你应该如何释放文件句柄? 解决方法
Scala.io._是为支持XML库和编译器而唯一目的而创建的准系统黑客攻击。它设计不当,受到许多问题的困扰。 Scala 2.8将声称其改进版本,尽管几乎没有什么可写回家。
感兴趣的各方正在进行第三方的努力来开发一个完善的Scala I / O库。它旨在带回JDK7 I / O重新设计的经验教训,同时提供Scala-ish API。 同时,只要您的应用程序绊倒了现有库的设计问题,就使用Java库。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- twitter-bootstrap – Simple_form:如何更改输入的包装器类
- 如何在TabView(PrimeNG)中延迟加载Angular 2组件?
- angularJS如何让控制器与控制器进行通信,个人理解。
- twitter-bootstrap – 在小屏幕上保持导航栏水平
- docker – 可以访问错误检查上下文:’can not stat’.gvf
- scala – 如果结果集可以更改,如何使用RESTful API实现强大
- scala – sbt 0.12.4 – 有x特征警告;重新运行-feature以获
- scala – IntelliJ Idea sbt管理的源文件
- 排序 – Bash:按最后一个字段值排序文本文件
- yum install mongodb 3.2失败