代码之家  ›  专栏  ›  技术社区  ›  GhostCat

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

  •  2
  • GhostCat  · 技术社区  · 7 年前

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

    我见过 how do i write to a file in kotlin .

    File("somefile.txt").printWriter().use ...

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

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

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

    flatMap() 一些临时变量,然后使用它 printWriter().use .

    但有没有一个好的,规范的方式,工作 没有 临时变量?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Roland    7 年前

    注意你的阅读代码( 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-作者;-)已将其修改为使用分隔符作为参数。。。