Lea la línea y agregue algo al final

Soy nuevo en kotlin. Estoy tratando de leer el file línea por línea y agregar algo al final de cada uno de ellos.

Mi file antes de leer:

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

Mi file después de leer y anexar:

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

Tengo un código para leer el file línea por línea, pero ¿podría decirme cómo agregar cadena a cada uno de ellos?

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

Januson tiene la idea correcta. Aquí hay un código de Kotlin para hacer el trabajo:

 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" } } 

Ejemplo de uso:

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

Si está utilizando Java 1.7+, puede usar Files.move lugar de delete / renameTo :

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

Consulte también Escribir en file después del partido en Kotlin .

No puede leer y escribir en el mismo file a less que esté usando RandomAccessFile . En cambio, debes hacer lo siguiente:

  • Lea la línea de su file de input.
  • Realice la modificación que desee (anexe al final de la línea, línea de printing).
  • Escriba una línea modificada en el file de salida.
  • Después de leer / escribir todos los datos, cierre ambos files.
  • Eliminar file de input. Cambie el nombre del file de salida al nombre del file de input.
  • No se pueden usar todos los parameters de configuration con una configuration personalizada en gradle con kotlin-dsl
  • ¿Deben colocarse los files de Kotlin en un directory de origen separado en Android?
  • Conversión de proyecto de Android con data binding de Java a Kotlin
  • No se puede deshacer una colección de objects xml usando JAXB y Kotlin
  • Firebase @Exclude con la class de datos kotlin
  • Kotlin después de 60 segundos detener la toma de logging de voz
  • La subclass de class sellada de Kotlin debe convertirse a la class base si se proporciona como RxJava Observable
  • Kotlin getter setter sin campo
  • Kotlin - Lista dentro de un filter de list
  • Smartcast es imposible porque propery tiene un getter abierto o personalizado
  • Proporcionar una instancia genérica en Kotlin & Guice