Lección 19 · 19 de 20
Escribir y leer archivos · Dart
Guarde y lea archivos de texto en Dart con la clase File de dart:io: writeAsStringSync, FileMode.append, readAsStringSync y readAsLinesSync.

La clase `File` de dart:io representa un archivo a partir de su ruta. File('shopping.txt') es un archivo de la carpeta actual, la misma desde la que se ejecuta el programa; crear el objeto todavía no toca el disco.
`writeAsStringSync()` escribe el texto en el archivo: si no existe lo crea y, si existe, reemplaza lo que tenía. Cada \n es un salto de línea. Con el argumento con nombre `mode: FileMode.append`, en cambio, añade al final sin borrar nada: la lista de la compra acaba con cuatro productos. existsSync() y lengthSync() confirman que el archivo está ahí y cuántos bytes ocupa.
`readAsStringSync()` lee el archivo entero como una sola cadena, y trim() quita el último salto de línea. `readAsLinesSync()` lo da ya partido en una lista, una cadena por línea, que es lo cómodo para volver a convertir el texto en datos: split(',') separa producto y cantidad, e int.parse suma las unidades.
Leer un archivo que no existe lanza una `FileSystemException`, que se atiende con try y on como en la lección anterior; su path dice qué archivo era. Si prefiere no llegar al error, `existsSync()` lo comprueba antes.
La terminación `Sync` indica que el programa espera a que termine cada operación. Dart tiene también versiones sin Sync, que no esperan y se usan con await; en una aplicación Flutter son las habituales, para no congelar la pantalla.
Código · main.dart
import 'dart:io';void main() { // A File is a path: here, a file in the current folder. var file = File('shopping.txt'); // writeAsStringSync creates the file, or replaces what it had. file.writeAsStringSync('bread,2\nmilk,1\n'); // With FileMode.append it adds at the end instead. file.writeAsStringSync('eggs,12\napples,6\n', mode: FileMode.append); print('Exists? ${file.existsSync()}. Size: ${file.lengthSync()} bytes'); // readAsStringSync gives the whole text at once. print(file.readAsStringSync().trim()); // readAsLinesSync gives a list with one string per line. var lines = file.readAsLinesSync(); int units = 0; for (var line in lines) { units += int.parse(line.split(',')[1]); } print('${lines.length} products, $units units in total'); // Reading a file that does not exist throws an exception. try { File('missing.txt').readAsStringSync(); } on FileSystemException catch (e) { print('Could not open ${e.path}'); } // existsSync lets us check before reading. print('Is there a missing.txt? ${File('missing.txt').existsSync()}');}Salida · dart run main.dart
Exists? true. Size: 32 bytes bread,2 milk,1 eggs,12 apples,6 4 products, 21 units in total Could not open missing.txt Is there a missing.txt? false
Para recordar
File('nombre.txt')es un archivo de la carpeta actual.writeAsStringSynccrea o reemplaza el archivo.mode: FileMode.appendañade al final.readAsStringSynclo da entero;readAsLinesSync, por líneas.- Un archivo que no existe lanza
FileSystemException.
Ejercicio
Escriba en notes.txt tres notas de examen, una por línea, añada una cuarta con FileMode.append y después lea el archivo para escribir la media.