Starting Scala 2.13
, the standard library provides a dedicated resource management utility: Using
.
More specifically, the Using#Manager
can be used when dealing with several resources.
In our case, we can manage different resources such as your PrintWriter
or BufferedReader
as they both implement AutoCloseable
, in order to read and write from a file to another and, no matter what, close both the input and the output resource afterwards:
import scala.util.Using
import java.io.{PrintWriter, BufferedReader, FileReader}
Using.Manager { use =>
val in = use(new BufferedReader(new FileReader("input.txt")))
val out = use(new PrintWriter("output.txt"))
out.println(in.readLine)
}
// scala.util.Try[Unit] = Success(())