Узнайте, как быстро читать и записывать файлы в этом компактном руководстве.

В сегодняшней быстрой подсказке мы узнаем, насколько легко читать и записывать файлы в Dart. Для этого мы воспользуемся объектом File библиотеки ‘dart: io’.

Чтобы продолжить, сгенерируйте проект с полной консолью с оператором сцены:

$ mkdir my_app && cd my_app
$ stagehand console-full

Смотрите решение в видео ниже:

Вот полное решение:

import 'dart:io';

main() async {
  var file = File('data.txt');
  var contents;

  if (await file.exists()) {
    // Read file
    contents = await file.readAsString();
    print(contents);

    // Write file
    var fileCopy = await File('data-copy.txt').writeAsString(contents);
    print(await fileCopy.exists());
    print(await fileCopy.length());
  }
}

И исходный код.

Расширение примера

1. Как лучше указать путь к файлу

Установите пакет path, добавив зависимость к вашему pubspec.yaml файлу:

dependencies:
  path: ^1.6.2

И запустил pub get в вашем терминале.

Импортируйте это в начало bin/main.dart и измените путь следующим образом:

import 'dart:io';
import 'package:path/path.dart';

void main() async {
  var pathToFile = join(dirname(Platform.script.toFilePath()), '..', 'data.txt');
  var file = File(pathToFile);
  ..
  ..
}

2. Как читать файл построчно

Мы можем создать поток чтения для обработки файла:

import 'dart:convert'; // Contains the `Utf8Decoder` and `LineSplitter` stream transformers
..
..
  if (await file.exists()) {
    // Read file
    contents = StringBuffer();
    var contentStream = file.openRead();

    contentStream
      .transform(Utf8Decoder())
      .transform(LineSplitter())
      .listen((String line) => contents.write(line), // Add line to our StringBuffer object
        onDone: () => print(contents.toString()), // Call toString() method to receive the complete data
        onError: (e) => print('[Problems]: $e'));
    ..
    ..
  }
..
..

Хорошим вариантом использования для этого будет обработка файла, содержащего переменные среды, например, содержимое файла ниже:

PORT=8080
API_KEY=lkjsk453lkslfkl5
API_USER=jermaineo

Пожалуйста, оставьте свой отзыв в комментариях и дайте мне знать, что вы хотели бы видеть в следующем!

Подпишитесь на канал Youtube для просмотра новых видео на Dart. Спасибо!

Ставьте лайки, делитесь и подписывайтесь на меня 😍, чтобы узнать больше о Dart.

Дальнейшее чтение:

  1. Класс File
  2. Бесплатные скринкасты по Dart на Egghead.io