File.openWrite în Dart

Deschide fișierul pentru scriere și returnează un IOSink în care scrii pe bucăți; trebuie închis cu close().

Sintaxă
IOSink openWrite({FileMode mode = FileMode.write, Encoding encoding = utf8})

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 bloc finally).
  • 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).