Kotlin附加到文件

use*_*511 5 io append kotlin

我对Kotlin绝对陌生,似乎我无法获取追加文件过程。我有val路径给定的文件名:String =“ ..... txt”我想在我的类中使用以下方法:line:String并将其附加在文件的末尾(在新行上)。我的测试用例是:用两个不同的行对方法进行两次结果调用,例如“ foo”和“ bar”,我希望文件如下:

foo
bar
Run Code Online (Sandbox Code Playgroud)

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

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

而且它绝对不会以这种方式工作:

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

每次调用时都会重写我的文件,因此我的文件中只有“ bar”。它也不能与printWriter一起使用:

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

我得到的结果与BufferedWriter相同。为什么?我就是听不懂。如何附加BufferedWriter或PrintWriter?

hot*_*key 5

无论File.bufferedWriterFile.printWriter实际重写目标文件,你跟他们写的东西代替它的内容。这主要是相当于,如果您使用会发生什么f.writeText(...),没有f.appendText(...)

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

FileOutputStream(f, true).bufferedWriter().use { writer ->
    //... 
}
Run Code Online (Sandbox Code Playgroud)