Kotlin:appendText和关闭资源

时间:2017-07-25 19:20:15

标签: java kotlin

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

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

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

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

感谢。

2 个答案:

答案 0 :(得分:4)

您可以跳转到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辅助方法。

答案 1 :(得分:0)

{J} appendText上没有Writer功能,您可以进一步查看here

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

IF 只有在您使用File#appendText后才能附加文字。例如:

out8.appendText("content")

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

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