Котлин добавить в файл - PullRequest
0 голосов
/ 20 ноября 2018

Я абсолютно новичок в Kotlin и, похоже, просто не могу получить процедуру добавления в файл. У меня есть имя файла, заданное val path: 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()
        }
    }

Он перезаписывает мой файл при каждом вызове, поэтому я получаю только "бар" в моем файле Он также не работает с printWriter:

    fun writeLine(line: String) {
        val f = File(path!!)
        f.printWriter().use { out->
        out.append(line)
        }
    }

Я получил тот же результат, что и для BufferedWriter. Зачем? Я просто не могу получить это. Как добавить с помощью BufferedWriter или PrintWriter?

1 Ответ

0 голосов
/ 20 ноября 2018

И File.bufferedWriter, и File.printWriter фактически переписывают целевой файл, заменяя его содержимое тем, что вы пишете им. Это в основном эквивалентно тому, что произошло бы, если бы вы использовали f.writeText(...), а не f.appendText(...).

Одним из решений было бы создание FileOutputStream в режиме добавления с использованием соответствующего конструктора FileOutputStream(file: File, append: Boolean), например:

FileOutputStream(f, true).bufferedWriter().use { writer ->
    //... 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...