Kotlin附加到文件

时间:2018-11-19 22:22:33

标签: kotlin io append

我绝对不是Kotlin的新手,似乎我无法获取添加到文件的过程。 我有val路径给定的文件名:String =“ ..... txt” 我希望类中的方法采用以下行: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?

1 个答案:

答案 0 :(得分:4)

File.bufferedWriterFile.printWriter都实际上重写了目标文件,将其内容替换为您用它们编写的内容。这基本上等同于使用f.writeText(...)而不是f.appendText(...)会发生的情况。

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

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