我对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?
无论File.bufferedWriter和File.printWriter实际重写目标文件,你跟他们写的东西代替它的内容。这主要是相当于,如果您使用会发生什么f.writeText(...),没有f.appendText(...)。
一种解决方案是FileOutputStream使用适当的构造函数以附加模式创建一个FileOutputStream(file: File, append: Boolean),例如:
FileOutputStream(f, true).bufferedWriter().use { writer ->
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |