首页 > 解决方案 > 如何写入文本文件 - 从输入读取后?

问题描述

替代标题:如何使用 Kotlin“很好地”“更新”文本文件的内容?

我已经看到如何在 kotlin 中写入文件

基本上,建议的解决方案是基于创建一个 File 对象,然后写入它:File("somefile.txt").printWriter().use ...

但是好吧:我已经有这样的代码:

File(fname).bufferedReader().lineSequence().flatMap { transform(it) }

我自己的方法在哪里transform()返回原始行,或者在某些特定匹配匹配时更新一些行。(它的签名是transform(line : String) : Sequence<String>

当然:我可以将结果分配flatMap()给一些临时变量,然后将其与printWriter().use.

但是有没有一种很好的、​​规范的方法可以在没有临时变量的情况下工作?

标签: filekotlin

解决方案


请注意,您的阅读代码 ( 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 ;-) 已经对其进行了调整以使用分隔符作为参数...


推荐阅读