Chapter 10. Input/Output
Kotlin makes doing input/output (I/O) operations easy, but the style is different from what a Java developer may expect. Resources in Kotlin are frequently closed by employing a use function that does so on the user’s behalf. This chapter includes a couple of recipes that focus on that approach, specifically for files, but that can be generalized to other resources.
10.1 Managing Resources with use
Problem
You want to process a resource such as a file and be sure that it is closed when you are finished, but Kotlin does not support Java’s try-with-resources construct.
Solution
Use the extension functions use or useLines on readers or input/output streams.
Discussion
Java 1.7 introduced the try-with-resources construct, which allows a developer to open a resource inside parentheses between the try keyword and its corresponding block; the JVM will automatically close the resource when the try block ends. The only requirement is that the resource come from a class that implements the Closeable interface. File, Stream, and many other classes implement Closeable, as the example in Example 10-1 shows.
Example 10-1. Using try-with-resources from Java
packageio;importjava.io.*;importjava.nio.file.Files;importjava.nio.file.Paths;importjava.util.stream.Stream;publicclassTryWithResourcesDemo{publicstaticvoidmain(String[]args)throwsIOException{Stringpath="src/main/resources/book_data.csv";Filefile=newFile(path);String