Scala io.Source.FromFile是否会返回任何类型的异常?

时间:2011-04-30 17:56:28

标签: scala file exception ioexception

当我停在这行代码上时,我正在查看我的代码,以便最后一次搜索异常:

var list: Array[String] = Source.fromFile(this.Path).getLines.toArray

我搜索了scala-lang的文档,但似乎该行的所有方法都没有抛出任何类型的ioException ... 怎么可能?

修改

try {
  var list: Array[String] = Source.fromFile("").getLines.toArray
}
catch {
  case ex:Exception => println(ex.getMessage)
}

没有打印任何东西,为什么?

2 个答案:

答案 0 :(得分:3)

javac强制执行检查异常,JVM并不真正了解它们。与Java相反,Scala不关心已检查的异常。

例如,查看Source,您将不会注意到任何处理异常的代码。在旧的Java中不可能的东西,这需要try / catchthrows条款。

尽管如此,Scala库作者可能仍然希望确保Java用户检查这些异常,因此有@throws注释,它允许您声明方法可能抛出异常,就像{{ 1}} Java子句。请务必记住throws仅供Java使用。

您可能还想查看scala.util.control.Exception。它包含处理异常的各种好东西。

答案 1 :(得分:1)

Source.fromFile调用java.io.FileInputStream.open,如果您为其提供不存在的文件,则会调出FileNotFoundException

Source.fromFile没有发现这一点,因此会在您的代码中看到它。

我怀疑java.io包中可能存在的许多其他异常同样未处理,但显然没有记录。