Для асинхронной записи текстовых файлов применяется метод 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); }