Kotlin追加到文件
我对Kotlin完全陌生,似乎我就是无法获得追加到文件的过程。 我的文件名由val path:String=“……txt”给出 我希望在我的类中有一个方法,该方法接受line:String并将其追加到文件的末尾(在新行)。 我的测试用例是:使用两行不同的代码(例如“foo”和“bar”)对方法进行两次consequentive调用,我希望文件如下所示:Kotlin追加到文件,kotlin,io,append,Kotlin,Io,Append,我对Kotlin完全陌生,似乎我就是无法获得追加到文件的过程。 我的文件名由val path:String=“……txt”给出 我希望在我的类中有一个方法,该方法接受line:String并将其追加到文件的末尾(在新行)。 我的测试用例是:使用两行不同的代码(例如“foo”和“bar”)对方法进行两次consequentive调用,我希望文件如下所示: foo bar 如果我的方法如下所示,则该方法有效: fun writeLine(line: String) { val f = Fi
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()
}
}
而且它绝对不能像这样工作:
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进行附加?同时使用
文件。BufferedWriter
和文件。PrintWriter
实际上重写了目标文件,将其内容替换为您使用它们编写的内容。这与使用f.writeText(…)
而不是f.appendText(…)
时发生的情况基本相同
一种解决方案是使用适当的构造函数在追加模式下创建FileOutputStream
,例如:
FileOutputStream(f, true).bufferedWriter().use { writer ->
//...
}
这不是一个直接的解决方案,但我强烈建议您尽可能避免使用
File
。看,谢谢!我会调查的.谢谢你!现在我明白了。不幸的是,我在这里的声誉太低了,我不能对你的答案加1,但这确实为我澄清了一些事情。