Я использую Scala Source.fromFile, но я не могу найти хороший способ получить его close базовый 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")
  }
У источника есть метод под названием reset, однако все, что это делает, это воссоздать источник из файла.
Внутренне Source создает базовый BufferedSource, который имеет метод close. Однако это не отображается из источника.
Я надеюсь, что Source выпустит дескриптор файла после того, как содержимое файла будет прочитано, но похоже, что это не так.
Лучшее обходное решение, которое я видел до сих пор, состоит в том, чтобы существенно отличить Source от BufferedSource и вызвать close.
try {
  src.getLines.foreach(l => print(l))
}
finally src match { case b: scala.io.BufferedSource => b.close }
В качестве альтернативы я мог бы создать Source из InputStream и управлять закрытием себя.
Однако это кажется несколько грязным. Как вы должны освобождать дескриптор файла при использовании Source?
