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