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 cuawait. - Citești cu
readAsStringun fișier de câțiva GB: tot conținutul ajunge în memorie. FoloseșteopenRead.
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.