我是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))
}
答案 0 :(得分:5)
Januson有权idea。这是一些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)
答案 1 :(得分:1)
除非使用RandomAccessFile,否则无法读取和写入同一文件。相反,您应该执行以下操作: