替代标题:如何使用Kotlin很好地“更新”文本文件的内容?
我见过how do i write to a file in kotlin。
基本上,这里建议的解决方案基于创建File对象,然后将其写入:File("somefile.txt").printWriter().use ...
但是好:我已经有这样的代码了:
File(fname).bufferedReader().lineSequence().flatMap { transform(it) }
其中transform()
是我自己的方法,该方法要么返回原始行,要么在某些特定匹配项匹配时更新某些行。 (其签名为transform(line : String) : Sequence<String>
)
确定:我可以将flatMap()
的结果分配给某个临时变量,然后将其与printWriter().use
一起使用。
但是有没有一种没有临时变量的好方法?
答案 0 :(得分:2)
请注意,您的阅读代码(File().bufferedReader().lineSequence()
)已经可以简化为:
File(fname).useLines {
it.flatMap(::transform)
}
现在可以不用将其放在中间变量中了...
File("writeTo").bufferedWriter().use { writer ->
File("readFrom").useLines { lines ->
lines.flatMap(::transform)
.forEach {
writer.appendln(it)
}
}
}
但是我还没有真正确信它……我不太喜欢它;-) 我更喜欢这样的东西:
File("readFrom").useLines {
..
}.writeTo("writeTo")
但是只要我使用useLines
;-)
但这是相似的:
File("readFrom").useLines {
it.flatMap(::transform)
.writeTo(File("writeTo"))
}
但这需要以下扩展功能:
fun Sequence<String>.writeTo(file: File) {
file.bufferedWriter().use { writer -> forEach { writer.appendln(it) } }
}
另一方面...我一直想拥有一个sequence.toFile-writer ;-)已经对其进行了修改,以使用定界符作为参数...