Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin追加到文件_Kotlin_Io_Append - Fatal编程技术网

Kotlin追加到文件

Kotlin追加到文件,kotlin,io,append,Kotlin,Io,Append,我对Kotlin完全陌生,似乎我就是无法获得追加到文件的过程。 我的文件名由val path:String=“……txt”给出 我希望在我的类中有一个方法,该方法接受line:String并将其追加到文件的末尾(在新行)。 我的测试用例是:使用两行不同的代码(例如“foo”和“bar”)对方法进行两次consequentive调用,我希望文件如下所示: foo bar 如果我的方法如下所示,则该方法有效: fun writeLine(line: String) { val f = Fi

我对Kotlin完全陌生,似乎我就是无法获得追加到文件的过程。 我的文件名由val path:String=“……txt”给出 我希望在我的类中有一个方法,该方法接受line:String并将其追加到文件的末尾(在新行)。 我的测试用例是:使用两行不同的代码(例如“foo”和“bar”)对方法进行两次consequentive调用,我希望文件如下所示:

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()
        }
    }
而且它绝对不能像这样工作:

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()
        }
    }
每次调用它都会重写我的文件,所以我的文件中只有“bar”。 它也不适用于printWriter:

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

我得到了与BufferedWriter相同的结果。为什么?我就是搞不懂。如何使用BufferedWriter或PrintWriter进行附加?

同时使用
文件。BufferedWriter
文件。PrintWriter
实际上重写了目标文件,将其内容替换为您使用它们编写的内容。这与使用
f.writeText(…)
而不是
f.appendText(…)
时发生的情况基本相同

一种解决方案是使用适当的构造函数在追加模式下创建
FileOutputStream
,例如:

FileOutputStream(f, true).bufferedWriter().use { writer ->
    //... 
}

这不是一个直接的解决方案,但我强烈建议您尽可能避免使用
File
。看,谢谢!我会调查的.谢谢你!现在我明白了。不幸的是,我在这里的声誉太低了,我不能对你的答案加1,但这确实为我澄清了一些事情。