scala Try:在失败情况下关闭文件

问题描述 投票:0回答:1

我编写了以下代码来写入文件:

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最佳实践进一步改进吗?

scala
1个回答
0
投票

我的问题是尝试关闭资源(此处的文件)以防失败吗?

不。使用

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)。

© www.soinside.com 2019 - 2024. All rights reserved.