xref: /aosp_15_r20/external/okio/docs/java_io_recipes.md (revision f9742813c14b702d71392179818a9e591da8620c)
1java.io Recipes
2===============
3
4These recipes use Okio with `java.io.File` instead of Okio's own `Path` and `FileSystem` types.
5
6
7Read a text file line-by-line ([Java][ReadJavaIoFileLineByLine]/[Kotlin][ReadJavaIoFileLineByLineKt])
8-----------------------------------------------------------------------------------------------------
9
10This is similar to the other [line-by-line example](recipes.md#read-a-text-file-line-by-line-javakotlin), but it uses `java.io.File`
11instead of `okio.Path` and `okio.FileSystem`.
12
13=== "Java"
14
15    ```java
16    public void readLines(File file) throws IOException {
17      try (Source fileSource = Okio.source(file);
18           BufferedSource bufferedFileSource = Okio.buffer(fileSource)) {
19
20        while (true) {
21          String line = bufferedFileSource.readUtf8Line();
22          if (line == null) break;
23
24          if (line.contains("square")) {
25            System.out.println(line);
26          }
27        }
28
29      }
30    }
31    ```
32
33=== "Kotlin"
34
35    Note that static `Okio` methods become extension functions (`Okio.source(file)` =>
36    `file.source()`).
37
38    ```kotlin
39    @Throws(IOException::class)
40    fun readLines(file: File) {
41      file.source().use { fileSource ->
42        fileSource.buffer().use { bufferedFileSource ->
43          while (true) {
44            val line = bufferedFileSource.readUtf8Line() ?: break
45            if ("square" in line) {
46              println(line)
47            }
48          }
49        }
50      }
51    }
52    ```
53
54Write a text file ([Java][WriteJavaIoFile]/[Kotlin][WriteJavaIoFileKt])
55-----------------------------------------------------------------------------------------------------
56
57This is similar to the other [write example](recipes.md#write-a-text-file-javakotlin), but it uses
58`java.io.File` instead of `okio.Path` and `okio.FileSystem`.
59
60=== "Java"
61
62    ```java
63    public void writeEnv(File file) throws IOException {
64      try (Sink fileSink = Okio.sink(file);
65           BufferedSink bufferedSink = Okio.buffer(fileSink)) {
66
67        for (Map.Entry<String, String> entry : System.getenv().entrySet()) {
68          bufferedSink.writeUtf8(entry.getKey());
69          bufferedSink.writeUtf8("=");
70          bufferedSink.writeUtf8(entry.getValue());
71          bufferedSink.writeUtf8("\n");
72        }
73
74      }
75    }
76    ```
77
78=== "Kotlin"
79
80    ```kotlin
81    @Throws(IOException::class)
82    fun writeEnv(file: File) {
83      file.sink().buffer().use { sink ->
84        for ((key, value) in System.getenv()) {
85          sink.writeUtf8(key)
86          sink.writeUtf8("=")
87          sink.writeUtf8(value)
88          sink.writeUtf8("\n")
89        }
90      }
91    }
92    ```
93
94
95[ReadJavaIoFileLineByLineKt]: https://github.com/square/okio/blob/master/samples/src/jvmMain/kotlin/okio/samples/ReadJavaIoFileLineByLine.kt
96[ReadJavaIoFileLineByLine]: https://github.com/square/okio/blob/master/samples/src/jvmMain/java/okio/samples/ReadJavaIoFileLineByLine.java
97[WriteJavaIoFileKt]: https://github.com/square/okio/blob/master/samples/src/jvmMain/kotlin/okio/samples/WriteJavaIoFile.kt
98[WriteJavaIoFile]: https://github.com/square/okio/blob/master/samples/src/jvmMain/java/okio/samples/WriteJavaIoFile.java
99