kotlin - 如何在 Kotlin 中写入文件?

我似乎还没有找到这个问题,但是打开/创建文件、写入文件然后关闭文件的最简单、最惯用的方法是什么?看着kotlin.io引用资料和我设法得到的 Java 文档:

fun write() {
    val writer = PrintWriter("file.txt")  // java.io.PrintWriter

    for ((member, originalInput) in history) {  // history: Map<Member, String>
        writer.append("$member, $originalInput\n")
    }

    writer.close()
}

这可行,但我想知道是否有“正确”的 Kotlin 方式来执行此操作?

最佳答案

有点惯用语。对于 PrintWriter,这个例子:

File("somefile.txt").printWriter().use { out ->
    history.forEach {
        out.println("${it.key}, ${it.value}")
    }
}

for 循环或 forEach 取决于您的风格。没有理由使用 append(x) 因为那基本上是 write(x.toString()) 并且你已经给它一个字符串。而 println(x) 基本上是在将 null 转换为 "null" 之后执行 write(x)。并且 println() 做了正确的行尾。

如果您使用的是 Kotlin 的 data 类,它们已经可以输出,因为它们已经有一个很好的 toString() 方法。

此外,在这种情况下,如果您想使用 BufferedWriter,它会产生相同的结果:

File("somefile.txt").bufferedWriter().use { out ->
    history.forEach {
        out.write("${it.key}, ${it.value}\n")
    }
}

如果您希望它在当前运行的操作系统中正确,您也可以使用 out.newLine() 而不是 \n。如果你一直这样做,你可能会创建一个扩展函数:

fun BufferedWriter.writeLn(line: String) {
    this.write(line)
    this.newLine()
}

然后改用它:

File("somefile.txt").bufferedWriter().use { out ->
    history.forEach {
        out.writeLn("${it.key}, ${it.value}")
    }
}

这就是 Kotlin 的运行方式。更改 API 中的内容以使其成为您想要的样子。

另一个答案中对此有很大不同的口味:https://stackoverflow.com/a/35462184/3679676

https://stackoverflow.com/questions/35444264/

相关文章:

android - 单元测试室和 LiveData

kotlin - 有什么区别!!和 ?在 Kotlin ?

kotlin - 如何将项目添加到 Kotlin 中的 ArrayList?

kotlin - 如何从命令行运行 Kotlin 类?

android - 房间持久性 : Error:Entities and Pojos must ha

kotlin - 警告 : Kotlin runtime JAR files in the clas

enums - 如何在 Kotlin 中为枚举创建 "static"方法?

kotlin - Kotlin 协程中的挂起函数是什么意思?

loops - 在 Kotlin 中的功能循环中,如何执行 "break"或 "continue"?

android - kotlin-stdlib-jre7 已弃用。请改用 kotlin-stdlib