File.readAsString în Dart

Citește tot conținutul unui fișier text într-un String (implicit UTF-8); varianta Sync blochează până termină.

Sintaxă
Future<String> readAsString({Encoding encoding = utf8})
String readAsStringSync({Encoding encoding = utf8})

Ce face File.readAsString

readAsString deschide fișierul, citește tot conținutul, îl decodifică (implicit UTF-8) și returnează un Future<String>. readAsStringSync face același lucru, dar returnează direct String și oprește programul până termină.

Este potrivit pentru fișiere mici și mijlocii (configurări, liste, JSON). Pentru fișiere foarte mari, citește pe bucăți cu openRead.

Dacă fișierul nu există, se aruncă PathNotFoundException (un tip de FileSystemException). Dacă octeții nu sunt UTF-8 valid, se aruncă FileSystemException; pentru fișiere vechi dai encoding: latin1.

Parametri

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

Ce returnează

Conținutul fișierului: Future<String> sau, la varianta Sync, String.

Exemple

Exemplul 1: Citirea unui fișier JSON de configurare

import 'dart:convert';
import 'dart:io';

Future<void> main() async {
  await File('config.json').writeAsString('{"oras": "Iași", "limba": "ro"}');

  final text = await File('config.json').readAsString();
  final config = jsonDecode(text) as Map<String, dynamic>;
  print('Oraș: ${config['oras']}, limbă: ${config['limba']}');
}

Rezultat

Oraș: Iași, limbă: ro

Exemplul 2: Varianta sincronă și fișierul care lipsește

import 'dart:io';

void main() {
  File('mesaj.txt').writeAsStringSync('Bună dimineața, Constanța!');
  print(File('mesaj.txt').readAsStringSync());

  try {
    File('lipsa.txt').readAsStringSync();
  } on PathNotFoundException catch (eroare) {
    print('Nu există: ${eroare.path}');
  }
}

Rezultat

Bună dimineața, Constanța!
Nu există: lipsa.txt

Exemplul 3: Fișier în altă codificare

Fișierul este scris în Latin-1; citit cu UTF-8 ar da eroare.

import 'dart:convert';
import 'dart:io';

void main() {
  File('vechi.txt').writeAsBytesSync(latin1.encode('café în Brașov'.replaceAll('ș', 's')));
  try {
    File('vechi.txt').readAsStringSync();
  } on FileSystemException catch (eroare) {
    print('UTF-8: ${eroare.message}');
  }
  print(File('vechi.txt').readAsStringSync(encoding: latin1));
}

Rezultat

UTF-8: Failed to decode data using encoding 'utf-8'
café în Brasov

Greșeli frecvente

  • Apelezi readAsStringSync într-un server sau într-o aplicație cu interfață: blochează tot programul cât durează citirea. Acolo folosește varianta cu await.
  • Citești cu readAsString un fișier de câțiva GB: tot conținutul ajunge în memorie. Folosește openRead.

Comenzi înrudite

  • File.readAsLines: Citește un fișier text și returnează lista rândurilor, fără caracterele de sfârșit de rând.
  • File.writeAsString: Scrie un text într-un fișier: îl creează dacă nu există și îl suprascrie; cu mode: FileMode.append adaugă la final.
  • File.openRead: Deschide fișierul ca flux de octeți citit pe bucăți; potrivit pentru fișiere mari, rând cu rând.
  • FileSystemException: Excepția aruncată de operațiile cu fișiere (lipsă, fără drepturi, ocupat); IOException este clasa de bază a erorilor dart:io.