我似乎还没有找到这个问题,但是打开/创建文件、写入文件然后关闭文件的最简单、最惯用的方法是什么?看着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/