Ce face File.writeAsString
writeAsString(text) scrie textul în fișier, codificat implicit în UTF-8. Dacă fișierul nu există, este creat; dacă există, conținutul vechi este înlocuit. Directorul în care se află fișierul trebuie să existe deja.
Cu mode: FileMode.append textul se adaugă la sfârșitul fișierului (vezi FileMode). Cu flush: true, datele sunt trimise pe disc înainte ca Future-ul să se termine.
writeAsString returnează un Future<File> (același fișier), deci se folosește cu await. writeAsStringSync nu returnează nimic și blochează până termină.
Parametri
| Parametru | Descriere |
|---|---|
contents |
Textul de scris. |
mode |
FileMode.write (implicit, suprascrie) sau FileMode.append (adaugă). |
encoding |
Codificarea; implicit utf8. |
flush |
true forțează scrierea pe disc înainte de a termina. |
Ce returnează
Future<File> (asincron) sau nimic (Sync).
Exemple
Exemplul 1: Suprascriere și adăugare
import 'dart:io';
Future<void> main() async {
final f = File('vizitatori.txt');
await f.writeAsString('Ana\n');
await f.writeAsString('Mihai\n');
print(await f.readAsString());
await f.writeAsString('Ioana\n', mode: FileMode.append);
await f.writeAsString('Radu\n', mode: FileMode.append);
print(await f.readAsString());
}
Rezultat
Mihai
Mihai
Ioana
Radu
Exemplul 2: Un raport generat, varianta sincronă
import 'dart:io';
void main() {
final vanzari = {'Iași': 1200, 'Cluj': 950, 'Timișoara': 780};
final raport = StringBuffer('Raport vânzări\n');
vanzari.forEach((oras, lei) => raport.writeln('$oras: $lei lei'));
File('raport.txt').writeAsStringSync(raport.toString());
print(File('raport.txt').readAsStringSync());
}
Rezultat
Raport vânzări
Iași: 1200 lei
Cluj: 950 lei
Timișoara: 780 lei
Exemplul 3: Directorul trebuie să existe
import 'dart:io';
void main() {
try {
File('exporturi/date.txt').writeAsStringSync('test');
} on FileSystemException catch (eroare) {
print('Eroare: ${eroare.message}');
}
Directory('exporturi').createSync();
File('exporturi/date.txt').writeAsStringSync('test');
print(File('exporturi/date.txt').existsSync());
}
Rezultat
Eroare: Cannot open file
true
Greșeli frecvente
- Apelezi
writeAsStringde mai multe ori ca să adaugi rânduri și rămâne doar ultimul. Fărămode: FileMode.append, fiecare apel suprascrie. - Nu aștepți (
await) scrierea și citești imediat fișierul: poate fi încă gol. - Scrii într-un director care nu există și primești
PathNotFoundException. Creează-l cuDirectory(...).create(recursive: true).
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ă.FileMode: Modul în care se deschide un fișier: read (doar citire), write (golește și scrie), append (adaugă la final).File.openWrite: Deschide fișierul pentru scriere și returnează un IOSink în care scrii pe bucăți; trebuie închis cu close().Directory.create: create face un director nou (și părinții lui, cu recursive: true); delete șterge directorul, cu tot conținutul dacă e recursiv.