file - 如何写入文本文件 - 从输入读取后?
问题描述
替代标题:如何使用 Kotlin“很好地”“更新”文本文件的内容?
我已经看到如何在 kotlin 中写入文件。
基本上,建议的解决方案是基于创建一个 File 对象,然后写入它:File("somefile.txt").printWriter().use ...
但是好吧:我已经有这样的代码:
File(fname).bufferedReader().lineSequence().flatMap { transform(it) }
我自己的方法在哪里transform()
返回原始行,或者在某些特定匹配匹配时更新一些行。(它的签名是transform(line : String) : Sequence<String>
)
当然:我可以将结果分配flatMap()
给一些临时变量,然后将其与printWriter().use
.
但是有没有一种很好的、规范的方法可以在没有临时变量的情况下工作?
解决方案
请注意,您的阅读代码 ( 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 ;-) 已经对其进行了调整以使用分隔符作为参数...
推荐阅读
- c# - 在 RestSharp 中解析 JSON 返回“System.NullReferenceException:对象引用未设置为对象的实例。”
- javascript - 在时刻时间戳之前添加字符串
- struct - 如何最好地处理可以更改类型的结构字段
- r - 如何使用 Shiny 一键生成多个报告
- java - Java - 如何从句子的 ArrayList 中获取每个单词
- c - 更改已在 C 中创建的 TypeDef 对象的值
- animation - 从方法开始 SlideTransition 的动画
- python-3.x - 如何将 1 个系列的唯一值作为列并计算每季度系列中唯一值的每次出现?
- c# - C#/Linq - 按字符串数组中返回的第二项分组,同时保留父项
- c# - 字段为空的实体代码第一个问题