我是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() lista = line.split(";") as ArrayList println(lista.get(0) + " and " + lista.get(1) + " and " + lista.get(2)) }
mfulton26.. 5
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中匹配后写入文件.
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中匹配后写入文件.