在删除之前是否需要释放Scala文件?

在删除之前是否需要释放Scala文件?,scala,Scala,在下面的代码中,如果取消对for循环的注释,文件将不再被删除 val file = "myfile.csv" //for (line <- Source.fromFile(file).getLines()) { } new File(file).delete() val file=“myfile.csv” //对于阅读“”后的(行),请使用“” 它包括一个可以处理一切的库。该库始终确保文件在每次使用后都能安全关闭。您应该调用某种类型的关闭: val file = "myfile.csv"

在下面的代码中,如果取消对for循环的注释,文件将不再被删除

val file = "myfile.csv"
//for (line <- Source.fromFile(file).getLines()) { }
new File(file).delete()
val file=“myfile.csv”
//对于阅读“”后的(行),请使用“”


它包括一个可以处理一切的库。该库始终确保文件在每次使用后都能安全关闭。

您应该调用某种类型的关闭:

val file = "myfile.csv"
val source = Source.fromFile(file)
for (line <- source.getLines()) { }
source.close
new File(file).delete
那么你可以

class CloseAfter[A <: { def close(): Unit }](a: A) {
  def closed[B](f: A => B) = try { f(a) } finally { a.close }
}
implicit def close_things[A <: { def close(): Unit }](a: A) = new CloseAfter(a)

(如果您在代码中多次这样做,或者您已经维护了自己的有用函数库,并且很容易在其中添加一次闭包隐式,这样您就可以在任何地方使用它,这将是一个好处).

正如其他人所说,是的,您需要在完成
源代码时关闭它。另一个好的解决方案是使用自动关闭文件

import resource._

val file = "myfile.csv"
for {
  source <- managed(Source.fromFile(file))
  line <- source.getLines()
} {
}
new File(file).delete
导入资源_
val file=“myfile.csv”
为了{

源窗口在打开文件时会锁定文件,从而防止执行其他操作,如删除。如果正确,则需要显式关闭文件。
val file = "myfile.csv"
Source.fromFile(file).closed(_.foreach{ line => })
new File(file).delete
import resource._

val file = "myfile.csv"
for {
  source <- managed(Source.fromFile(file))
  line <- source.getLines()
} {
}
new File(file).delete