Puede haber varias formas de leer un archivo de texto sin formato en kotlin.
Quiero saber cuáles son las formas posibles y cómo puedo usarlas.
1. Usando BufferedReader
import java.io.File import java.io.BufferedReader fun main(args: Array<String>) { val bufferedReader: BufferedReader = File("example.txt").bufferedReader() val inputString = bufferedReader.use { it.readText() } println(inputString) }2. Usando InputStream
Leer por línea
import java.io.File import java.io.InputStream fun main(args: Array<String>) { val inputStream: InputStream = File("example.txt").inputStream() val lineList = mutableListOf<String>() inputStream.bufferedReader().forEachLine { lineList.add(it) } lineList.forEach{println("> " + it)} }Leer todas las líneas
import java.io.File import java.io.InputStream fun main(args: Array<String>) { val inputStream: InputStream = File("example.txt").inputStream() val inputString = inputStream.bufferedReader().use { it.readText() } println(inputString) }3. Usar archivo directamente
import java.io.File import java.io.BufferedReader fun main(args: Array<String>) { val lineList = mutableListOf<String>() File("example.txt").useLines { lines -> lines.forEach { lineList.add(it) }} lineList.forEach { println("> " + it) } }Creo que la forma más sencilla de codificar es usar kotlin.text y java.io.File
import java.io.File fun main(args: Array<String>) { val text = File("sample.txt").readText() println(text) }Las respuestas anteriores aquí están todas basadas en Kotlin Java. Aquí hay una forma nativa de Kotlin de leer archivos de texto:
val bufferLength = 64 * 1024 val buffer = allocArray<ByteVar>(bufferLength) for (i in 1..count) { val nextLine = fgets(buffer, bufferLength, file)?.toKString() if (nextLine == null || nextLine.isEmpty()) break val records = parseLine(nextLine, ',') val key = records[column] val current = keyValue[key] ?: 0 keyValue[key] = current + 1 } fun parseLine(line: String, separator: Char) : List<String> { val result = mutableListOf<String>() val builder = StringBuilder() var quotes = 0 for (ch in line) { when { ch == '\"' -> { quotes++ builder.append(ch) } (ch == '\n') || (ch == '\r') -> {} (ch == separator) && (quotes % 2 == 0) -> { result.add(builder.toString()) builder.setLength(0) } else -> builder.append(ch) } } return result }