Kotlin: appendText и закрывающие ресурсы

Я новичок в Kotlin, но у меня сильный Java-фон (Java – это моя дневная работа). Я люблю некоторые из функций быстрого доступа в Котлине. Один из них – File.appendText (). Это очень удобно, ИМО.

Мой вопрос о закрытии ресурсов. Если бы я использовал автора, я бы сделал что-то вроде этого:

out8.writer().use { ... } 

Но я ничего не вижу непосредственно в методе appendText, который указывает на закрытие ресурсов. Котлин справляется с этим за кулисами для меня, или это то, о чем я должен беспокоиться по-другому?

Благодарю.

Вы можете просто перейти к реализации appendText в вашей среде IDE, чтобы узнать ( Ctrl + B в Windows, ⌘B на Mac).

Вот реализация метода:

 public fun File.appendText(text: String, charset: Charset = Charsets.UTF_8): Unit = appendBytes(text.toByteArray(charset)) 

И вот метод appendBytes которому он делегирует работу:

 public fun File.appendBytes(array: ByteArray): Unit = FileOutputStream(this, true).use { it.write(array) } 

Вы можете видеть, что на самом деле он использует метод вспомогательного use как вы ожидали.

Вы правы, нет функции appendText в Writer , вы можете видеть здесь как дальше.

Функция использования такая же, как выражение java-7 try-with-resource . он закроет ресурс после выхода блока. Фактически File # appendText вызывает функцию использования, чтобы закрыть ресурс.

ЕСЛИ вы добавляете текст только после того, как вы можете использовать File # appendText . например:

 out8.appendText("content") 

Если вы хотите работать с файлом более одного раза, вы должны использовать File # bufferedWriter () , потому что File # appendText создаст и откроет новый писатель каждый раз. например:

 out8.bufferedWriter().use{ it.append("first").append("second") }