我编写了以下代码来写入文件:
Try {
val filePath = "path/to/write/myfile.json"
val file = new File(filePath)
file.createNewFile();
val fileWriter = new FileWriter(file)
val objToWrite = someFunction()
fileWriter.write(objToWrite.toJson)
fileWriter.close()
} match {
case Failure(ex) =>
log.error("Failed to save data")
throw ex
case Success(_) =>
log.info("Data saved successfully")
}
我的问题是尝试关闭资源(此处的文件)以防失败?
如果没有,那么我们该怎么做,因为 Try 不允许使用finally 块?
另外,这个IO操作可以根据scala最佳实践进一步改进吗?
我的问题是尝试关闭资源(此处的文件)以防失败吗?
不。使用
Try
时根本没有资源管理。它的行为就像一个“老派”Java try..catch
没有资源。
如果没有,那么 Try 不允许使用finally 块,我们该怎么办?
您想使用
scala.util.Using
,例如:
Using(new FileWriter(file)) { fileWriter =>
// Use the fileWriter
// No need to explicitly close it
???
} match {
case Failure(_) => ???
case Success(_) => ???
}
用于执行自动资源管理的实用程序。它可用于使用资源执行操作,然后按创建时的相反顺序释放资源。
请参阅 文档(Scala 3,但也适用于 2.13)。