Ce face File.openWrite
openWrite() returnează un IOSink: un obiect în care scrii text sau octeți de mai multe ori (write, writeln, add), fără să construiești tot conținutul în memorie. Este potrivit pentru exporturi mari sau jurnale.
Ca la writeAsString, modul implicit FileMode.write golește fișierul, iar FileMode.append scrie la final. Datele sunt scrise pe disc în fundal; trebuie să apelezi await sink.close() la final, altfel ultimele date se pot pierde, iar fișierul rămâne deschis.
Parametri
| Parametru | Descriere |
|---|---|
mode |
FileMode.write (implicit) sau FileMode.append. |
encoding |
Codificarea folosită de write; implicit utf8. |
Ce returnează
Un IOSink legat de fișier.
Exemple
Exemplul 1: Export CSV rând cu rând
import 'dart:io';
Future<void> main() async {
final elevi = [('Ana', 9.5), ('Mihai', 8.25), ('Ioana', 10.0)];
final sink = File('export.csv').openWrite();
sink.writeln('nume,medie');
for (final (nume, medie) in elevi) {
sink.writeln('$nume,$medie');
}
await sink.close();
print(await File('export.csv').readAsString());
}
Rezultat
nume,medie
Ana,9.5
Mihai,8.25
Ioana,10.0
Exemplul 2: Jurnal cu adăugare la final
import 'dart:io';
Future<void> scrieInJurnal(String mesaj) async {
final sink = File('aplicatie.log').openWrite(mode: FileMode.append);
sink.writeln(mesaj);
await sink.close();
}
Future<void> main() async {
await scrieInJurnal('pornire');
await scrieInJurnal('utilizator Ana conectat');
await scrieInJurnal('oprire');
print(await File('aplicatie.log').readAsLines());
}
Rezultat
[pornire, utilizator Ana conectat, oprire]
Greșeli frecvente
- Nu închizi sink-ul: fișierul poate rămâne gol sau incomplet. Scrie mereu
await sink.close()(eventual într-un blocfinally). - Citești fișierul înainte de
await sink.close(): datele pot fi încă în memorie, nescrise.
Comenzi înrudite
IOSink: Destinația în care scrii text sau octeți: un fișier deschis (openWrite), stdout, stderr sau răspunsul HTTP.IOSink.close: close termină scrierea și închide destinația; flush așteaptă ca datele scrise până acum să ajungă la destinație.File.writeAsString: Scrie un text într-un fișier: îl creează dacă nu există și îl suprascrie; cu mode: FileMode.append adaugă la final.FileMode: Modul în care se deschide un fișier: read (doar citire), write (golește și scrie), append (adaugă la final).