I absolutely new to Kotlin and seems I just can not get the append-to-file procedure. I have filename given by val path: String = ".....txt" I want a method in my class that takes line: String and appends it at the end of my file (on new line). My test case is: two consequtive calls to method with two different lines for example "foo" and "bar" and I expect file like:
foo
bar
It works if my method looks like this:
fun writeLine(line: String) {
val f = File(path!!)
f.appendText(line + System.getProperty("line.separator"))
}
And it absolutely doesn`t work in any way like this:
fun writeLine(line: String) {
val f = File(path!!)
f.bufferedWriter().use { out->
out.append(line)
out.newLine()
}
}
It rewrites my file with each call so I get only "bar" in my file. It doesn`t work with printWriter either:
fun writeLine(line: String) {
val f = File(path!!)
f.printWriter().use { out->
out.append(line)
}
}
I`ve got the same result as for BufferedWriter. Why? I just can not get it. How do I append with BufferedWriter or PrintWriter?
Using plus() function A simple solution to append characters to the end of a String is using the + (or += ) operator.
To add a single element to a list or a set, use the add() function. The specified object is appended to the end of the collection. addAll() adds every element of the argument object to a list or a set.
Both File.bufferedWriter
and File.printWriter
actually rewrite the target file, replacing its content with what you write with them. This is mostly equivalent to what would happen if you used f.writeText(...)
, not f.appendText(...)
.
One solution would be to create a FileOutputStream
in the append mode by using the appropriate constructor FileOutputStream(file: File, append: Boolean)
, for example:
FileOutputStream(f, true).bufferedWriter().use { writer ->
//...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With