从输入读取后如何写入文本文件?

时间:2018-09-17 14:30:21

标签: file kotlin

替代标题:如何使用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一起使用。

但是有没有一种没有临时变量的好方法?

1 个答案:

答案 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 ;-)已经对其进行了修改,以使用定界符作为参数...