Ce face File.readLines
File("elevi.txt").readLines() deschide fișierul, citește toate rândurile într-o List<String> și închide fișierul. Caracterele de sfârșit de rând (\n, \r\n) nu apar în elemente. Un rând nou la finalul fișierului nu produce un element gol în plus.
Rezultatul este o listă obișnuită, deci poți folosi direct filter, map, size sau destructurarea. Ca și readText, încarcă tot fișierul în memorie; pentru fișiere uriașe folosește useLines.
Parametri
| Parametru | Descriere |
|---|---|
charset |
Codificarea; implicit UTF-8. |
Ce returnează
O List<String> cu rândurile fișierului.
Exemple
Exemplul 1: Citirea unui fișier CSV
Primul rând este antetul; îl sărim cu drop(1) și împărțim restul după virgulă.
import java.io.File
fun main() {
File("elevi.csv").writeText("nume,oras,media\nAna,Iași,9.50\nIon,Cluj,8.25\nMaria,Sibiu,9.80\n")
val randuri = File("elevi.csv").readLines()
println("Rânduri: ${randuri.size}")
for (rand in randuri.drop(1)) {
val (nume, oras, media) = rand.split(",")
println("$nume ($oras): $media")
}
}
Rezultat
Rânduri: 4
Ana (Iași): 9.50
Ion (Cluj): 8.25
Maria (Sibiu): 9.80
Exemplul 2: Statistici dintr-un fișier
Rândurile sunt o listă, așa că media se calculează cu map și average.
import java.io.File
fun main() {
File("temperaturi.txt").writeText("12.5\n14.0\n9.5\n16.0\n")
val valori = File("temperaturi.txt").readLines().map { it.toDouble() }
println(valori)
println("Media: ${valori.average()} °C, maxim: ${valori.max()} °C")
}
Rezultat
[12.5, 14.0, 9.5, 16.0]
Media: 13.0 °C, maxim: 16.0 °C
Exemplul 3: Ignorarea rândurilor goale și a comentariilor
Păstrăm doar rândurile care au conținut și nu încep cu #.
import java.io.File
fun main() {
File("orase.txt").writeText("# lista oraselor\nIași\n\nCluj\n# temporar\nBrașov\n")
val orase = File("orase.txt").readLines()
.filter { it.isNotBlank() && !it.startsWith("#") }
println(orase)
}
Rezultat
[Iași, Cluj, Brașov]
Greșeli frecvente
- Folosești
readText().split("\n"). Pe fișiere din Windows rămâne\rla final și apare un element gol după ultimul rând;readLines()le tratează corect. - Convertești toate rândurile cu
toInt()fără să elimini rândurile goale, iar conversia eșuează.
Comenzi înrudite
File.readText: readText citește tot conținutul unui fișier ca String; writeText îl scrie (înlocuind tot), appendText adaugă la final.File.forEachLine: Parcurg un fișier rând cu rând, fără să-l încarce tot în memorie; fișierul se închide automat la final.String.lines: Împarte textul în rânduri, după orice tip de rând nou (\n, \r\n sau \r), și returnează lista lor.String.split: Împarte un text în bucăți după un separator și returnează o listă de String-uri.