java.io 秘籍¶
这些秘籍使用 Okio 配合 java.io.File
,而非 Okio 自带的 Path
和 FileSystem
类型。
逐行读取文本文件 (Java/Kotlin)¶
这与另一个逐行读取示例类似,但它使用的是 java.io.File
,而非 okio.Path
和 okio.FileSystem
。
public void readLines(File file) throws IOException {
try (Source fileSource = Okio.source(file);
BufferedSource bufferedFileSource = Okio.buffer(fileSource)) {
while (true) {
String line = bufferedFileSource.readUtf8Line();
if (line == null) break;
if (line.contains("square")) {
System.out.println(line);
}
}
}
}
请注意,静态 Okio
方法变成了扩展函数 (Okio.source(file)
=> file.source()
)。
@Throws(IOException::class)
fun readLines(file: File) {
file.source().use { fileSource ->
fileSource.buffer().use { bufferedFileSource ->
while (true) {
val line = bufferedFileSource.readUtf8Line() ?: break
if ("square" in line) {
println(line)
}
}
}
}
}
写入文本文件 (Java/Kotlin)¶
这与另一个写入示例类似,但它使用的是 java.io.File
,而非 okio.Path
和 okio.FileSystem
。
public void writeEnv(File file) throws IOException {
try (Sink fileSink = Okio.sink(file);
BufferedSink bufferedSink = Okio.buffer(fileSink)) {
for (Map.Entry<String, String> entry : System.getenv().entrySet()) {
bufferedSink.writeUtf8(entry.getKey());
bufferedSink.writeUtf8("=");
bufferedSink.writeUtf8(entry.getValue());
bufferedSink.writeUtf8("\n");
}
}
}
@Throws(IOException::class)
fun writeEnv(file: File) {
file.sink().buffer().use { sink ->
for ((key, value) in System.getenv()) {
sink.writeUtf8(key)
sink.writeUtf8("=")
sink.writeUtf8(value)
sink.writeUtf8("\n")
}
}
}