File.readAsLines în Dart

Citește un fișier text și returnează lista rândurilor, fără caracterele de sfârșit de rând.

Sintaxă
Future<List<String>> readAsLines({Encoding encoding = utf8})
List<String> readAsLinesSync({Encoding encoding = utf8})

Ce face File.readAsLines

readAsLines citește tot fișierul și îl împarte în rânduri, ca LineSplitter: recunoaște \n, \r\n și \r, iar caracterele de sfârșit de rând nu apar în rezultat. Dacă fișierul se termină cu un rând nou, nu apare un ultim element gol.

readAsLinesSync este varianta sincronă. Ambele încarcă tot fișierul în memorie; pentru fișiere uriașe, citește rândurile pe rând dintr-un flux (openRead).

Parametri

Parametru Descriere
encoding Opțional. Codificarea; implicit utf8.

Ce returnează

Lista rândurilor (List<String>).

Exemple

Exemplul 1: Media notelor dintr-un fișier CSV

import 'dart:io';

Future<void> main() async {
  await File('note.csv').writeAsString('Ana,9\nMihai,7\nIoana,10\n');

  final randuri = await File('note.csv').readAsLines();
  print('${randuri.length} elevi');
  var suma = 0;
  for (final rand in randuri) {
    final [nume, nota] = rand.split(',');
    suma += int.parse(nota);
    print('$nume: $nota');
  }
  print('Media: ${(suma / randuri.length).toStringAsFixed(2)}');
}

Rezultat

3 elevi
Ana: 9
Mihai: 7
Ioana: 10
Media: 8.67

Exemplul 2: Varianta sincronă, cu rânduri goale și sfârșituri Windows

import 'dart:io';

void main() {
  File('cumparaturi.txt').writeAsStringSync('lapte\r\npâine\r\n\r\nmere\r\n');
  final randuri = File('cumparaturi.txt').readAsLinesSync();
  print(randuri);
  print(randuri.where((r) => r.isNotEmpty).toList());
}

Rezultat

[lapte, pâine, , mere]
[lapte, pâine, mere]

Greșeli frecvente

  • Faci readAsString() urmat de split('\n') și obții un element gol la final sau \r rămas pe rânduri. readAsLines rezolvă ambele.

Comenzi înrudite

  • File.readAsString: Citește tot conținutul unui fișier text într-un String (implicit UTF-8); varianta Sync blochează până termină.
  • LineSplitter: Împarte un text în rânduri, recunoscând \n, \r\n și \r; funcționează și pe fluxuri cu transform.
  • File.openRead: Deschide fișierul ca flux de octeți citit pe bucăți; potrivit pentru fișiere mari, rând cu rând.