Чтение и запись текстовых файлов

Последнее обновление: 12.04.2023

Запись в файл

Для асинхронной записи текстовых файлов применяется метод writeAsString():

writeAsString(String contents, {FileMode mode = FileMode.write, Encoding encoding = utf8, bool flush = false}) -> Future<File>

Метод возвращает записанный файл через объект Future и принимает следующие параметры:

  • contents: записываемая строка

  • mode: режим файла в виде объекта FileMode. По умолчанию применяется значение FileMode.write, которое позволяет перезаписать файл полностью. Если нам надо добавить текст в конец файла, то применяется значение FileMode.append

  • encoding: применяемая кодировка в виде объекта Encoding. По умолчанию применяется кодировка utf8

  • flush: логическое значение. Если оно равно true, то записываемые данные будут автоматичеcки сбрасываться из буфера в файл перед завершением работы метода.

Для синхронной записи применяется метод writeAsStringSync, который работает аналогично, только ничего не возвращает:

writeAsStringSync(String contents, {FileMode mode = FileMode.write, Encoding encoding = utf8, bool flush = false}) -> void

Например, запишем строку в файл:

import 'dart:io';

void main () async{
  String text = "Hello METANIT.COM\n";  // текст для записи
  File file = File("hello.txt");
  await file.writeAsString(text);
  print("File has been written");
}

После выполнения программы в каталоге проекта (или в каталоге скрипта программы) появится файл "hello.txt", в котором будет записана строка "Hello METANIT.COM\n".

В примере выше, если в файле были какие-то данные, то они полностью перезаписывались. С помошью параметра mode: FileMode.append дозаписать данные в конец файла:

import 'dart:io';

void main () async{
  String text = "Hello METANIT.COM\n";  // текст для записи
  File file = File("hello.txt");
  // дозапись
  await file.writeAsString(text, mode: FileMode.append);
  await file.writeAsString(text, mode: FileMode.append);
  print("File has been written");
}

Чтение текстовых файлов

Текстовый файл можно считывать двумя способами - как список строк и как одну строку в целом. Для асинхронного построчного чтения применяется метод readAsLines(), который в качестве необязательного параметра принимает кодировку:

Future<List<String>> readAsLines({Encoding encoding = utf8});

Каждая считанная строка из файла будет представлять текст, который заканчивается символом перевода строки \n.

Для синхронного чтения применяется метод readAsLinesSync(), который работает аналогично:

List<String> readAsLinesSync({Encoding encoding = utf8});

Например, считаем построчно текст из ранее записанного файла "hello.txt":

import 'dart:io';

void main () async{
  //String text = "Hello METANIT.COM\n";  // текст для записи
  File file = File("hello.txt");
  var lines = await file.readAsLines();
  for(final line in lines){
    print(line);
  }
}

Для асинхронного чтения текстовых файлов в одну строку применяется метод readAsString()

Future<String> readAsString({Encoding encoding = utf8});

В качестве параметра метод принимает кодировку, в которой надо считать текст, и возвращает считанный текст в виде строки.

Для синхронного считывания строки применяется метод readAsStringSync(), который работает аналогичным образом:

String readAsStringSync({Encoding encoding = utf8});

Например, считаем весь ранее записанный текст из "hello.txt":

import 'dart:io';

void main () async{
  File file = File("hello.txt");
  String content = await file.readAsString();
  print(content);
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850