【问题标题】:Kotlin append to fileKotlin 附加到文件
【发布时间】:2019-04-22 08:04:43
【问题描述】:

我对 Kotlin 完全陌生,似乎无法获得附加到文件的过程。 我有 val path 给出的文件名: String = ".....txt" 我想要一个方法在我的类中使用 line: String 并将其附加到我的文件末尾(在新行上)。 我的测试用例是:对具有两条不同行的方法进行两次连续调用,例如“foo”和“bar”,我希望文件如下:

foo
bar

如果我的方法如下所示,它会起作用:

fun writeLine(line: String) {
    val f = File(path!!)
    f.appendText(line + System.getProperty("line.separator"))
}

而且它绝对不会像这样工作:

    fun writeLine(line: String) {
        val f = File(path!!)
        f.bufferedWriter().use { out->
        out.append(line)
        out.newLine()
        }
    }

它会在每次调用时重写我的文件,所以我的文件中只有“bar”。 它也不适用于 printWriter:

    fun writeLine(line: String) {
        val f = File(path!!)
        f.printWriter().use { out->
        out.append(line)
        }
    }

我得到了与 BufferedWriter 相同的结果。为什么?我就是不明白。如何追加 BufferedWriter 或 PrintWriter?

【问题讨论】:

标签: kotlin io append


【解决方案1】:

File.bufferedWriterFile.printWriter 实际上都重写了目标文件,将其内容替换为您使用它们编写的内容。这与使用f.writeText(...) 而不是f.appendText(...) 的情况大致相同。

一种解决方案是使用适当的构造函数FileOutputStream(file: File, append: Boolean) 在附加模式下创建FileOutputStream,例如:

FileOutputStream(f, true).bufferedWriter().use { writer ->
    //... 
}

【讨论】:

  • 谢谢!现在我懂了。不幸的是,我在这里的声誉太低了,我不能对你的回答 +1,但它确实为我清除了一切。
猜你喜欢
  • 2020-07-10
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2010-09-27
  • 2016-12-12
  • 2015-05-25
相关资源
最近更新 更多