阅读行并在最后添加一些内容

我是kotlin新手。 我试图逐行读取文件,并在每个文件末尾添加一些内容。

我的文件在阅读之前:

abcd;abcd;abcd; bcda;bcda;bcda; dacb;dacb;dacb; 

我的文件阅读和追加后:

 abcd;abcd;abcd;smth1 bcda;bcda;bcda;smth2 dacb;dacb;dacb;smth3 

我有一行一行地阅读文件的代码,但你能告诉我如何将字符串添加到每个?

 val pathToFile = "abc.txt" val scan = Scanner(File(pathToFile)) while (scan.hasNextLine()) { val line = scan.nextLine() var lista = ArrayList<String>() lista = line.split(";") as ArrayList<String> println(lista.get(0) + " and " + lista.get(1) + " and " + lista.get(2)) } 

Januson有正确的想法 。 这是一些Kotlin代码来完成这项工作:

 inline fun File.mapLines(crossinline transform: (line: String) -> String) { val tempFile = createTempFile(prefix = "transform", suffix = ".txt") tempFile.printWriter().use { writer -> this.forEachLine { line -> writer.println(transform(line)) } } check(this.delete() && tempFile.renameTo(this)) { "failed to replace file" } } 

用法示例:

 val pathToFile = "abc.txt" var index = 0 File(pathToFile).mapLines { line -> "${line}smth${++index}" } 

如果你使用Java 1.7+,那么你可以使用Files.move而不是delete / renameTo

 Files.move(tempFile.toPath(), this.toPath(), StandardCopyOption.REPLACE_EXISTING) 

参见在Kotlin比赛后写入文件 。

除非使用RandomAccessFile,否则无法读取和写入相同的文件。 相反,你应该做以下几点:

  • 从输入文件中读取一行。
  • 做你想要的修改(追加到行尾,打印行)。
  • 将修改的行写入输出文件。
  • 读取/写入所有数据后关闭这两个文件。
  • 删除输入文件。 将输出文件重命名为输入文件名称。