Kotlin:appendText和关闭资源

我是Kotlin的新手,但是我有一个强大的Java背景(Java是我的日常工作)。 我喜欢Kotlin的一些快捷功能。 其中一个重要的是File.appendText()。 IMO非常方便。

我的问题是关闭资源。 如果我要使用一个作家,我会做这样的事情:

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

但是我没有直接在appendText方法上看到任何表示关闭资源的东西。 Kotlin是在幕后为我处理的,还是这个我不得不以另一种方式担心呢?

谢谢。

你可以直接在你的IDE中执行appendText来找出(在Windows上是Ctrl + B ,在Mac上是⌘B )。

以下是该方法的实现:

 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帮助器方法,就像你所期望的那样。

你对Writer没有appendText函数,你可以在这里看到更多。

使用函数与java-7 try-with-resource表达式相同。 它会在块退出后关闭资源。 实际上, File#appendText调用使用函数来关闭资源。

如果您仅使用File#appendText代替文本,就可以附加文本。 例如:

 out8.appendText("content") 

如果你想多次操作一个文件,你应该使用File#bufferedWriter() ,因为File#appendText每次都会创建并打开一个新的writer。 例如:

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