我绝对不是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?
答案 0 :(得分:4)
File.bufferedWriter
和File.printWriter
都实际上重写了目标文件,将其内容替换为您用它们编写的内容。这基本上等同于使用f.writeText(...)
而不是f.appendText(...)
会发生的情况。
一种解决方案是使用适当的构造函数FileOutputStream(file: File, append: Boolean)
在附加模式下创建FileOutputStream
,例如:
FileOutputStream(f, true).bufferedWriter().use { writer ->
//...
}