Мы обсудим эти методы чтения содержимого файла в dart.

readAsStringSync, readAsString, readAsLinesSync, readAsLines ,readAsBytesSync, readAsBytes

Требования

Требуется Dart SDK.

Начиная с Flutter 1.21,"Flutter SDK"включает в себя полный Dart SDK. Поэтому, если у вас установлен Flutter, вам может не потребоваться явная загрузка Dart SDK.

Вы можете увидеть шаги по установке Dart SDK здесь.



Создать проект дротика

Создайте проект дротика из командной строки, используя

dart create read_text

Здесь read_text — название нашего проекта

Если вы используете текстовый редактор, такой как Visual Studio Code, вы можете использовать Ctrl+Shift+P и выбрать «Dart: New Project», чтобы создать проект.

Теперь откройте папку проекта в текстовом редакторе.

Я использую код Visual Studio.

Теперь создайте текстовый файл в папке нашего проекта, я создал его в папке с ресурсами и назвал sample.txt.

Мы обсудим шесть методов чтения данных из файла, три из них синхронные и три асинхронные.

Сначала нам нужно получить путь к файлу, для этого мы установим пакет путей

Перейдите на https://pub.dev/packages/path и добавьте его в файл pubspec.yaml следующим образом.

dependencies:
  path: ^1.8.0

и импортируем его в наш код

import 'dart:io';
import ‘package:path/path.dart’ as p;

Я также импортировал пакет «dart:io», который содержит методы файловых операций, которые мы собираемся обсудить.

Далее мы получим наш путь к файлу. Внутри нашего основного метода добавьте этот код

var filePath = p.join(Directory.current.path, 'assets', 'sample.txt');

Я объясню приведенный выше код

Directory.current.path даст путь к корневому каталогу нашего проекта в виде строки.

Теперь мы будем использовать метод соединения из пакета path для создания пути к нашему файлу, используя

p.join(Directory.current.path, 'assets', 'sample.txt')

Теперь передайте этот путь к файлу классу File и сохраните его в файловой переменной.

File file = File(filePath);

Это наш код до сих пор

import 'dart:io';
import 'package:path/path.dart' as p;
void main() {
var filePath = p.join(Directory.current.path, 'assets', 'sample.txt');
File file = File(filePath);
}

Если мы попытаемся добавить путь напрямую, как это

File file = File(‘../assets/sample.txt’);

Мы можем получить ошибку

Unhandled exception:
FileSystemException: Cannot open file, path = ‘../assets/sample.txt’ (OS Error: The system cannot find the path specified.
, errno = 3)

Теперь посмотрим, как работает каждый из методов чтения

Каждый метод имеет синхронную версию и асинхронную версию.

Dart рекомендует использовать асинхронные методы. Вот цитата из документации.

В целом, dart:io реализует и продвигает асинхронный API. Синхронные методы могут легко заблокировать приложение, что затруднит его масштабирование. Поэтому большинство операций возвращают результаты через объекты Future или Stream — шаблон, распространенный на современных серверных платформах, таких как Node.js.

Мы обсудим оба типа.

readAsStringSync

Синхронно считывает все содержимое файла в виде строки, используя заданную кодировку, кодировка по умолчанию — utf-8.

import 'dart:io';
import 'package:path/path.dart' as p;
void main() {
var filePath = p.join(Directory.current.path, 'assets', 'sample.txt');
File file = File(filePath);
var fileContent = file.readAsStringSync();
print(fileContent);
}

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

readAsString

Это асинхронная версия readAsStringSync. Возвращает Future<String>, который завершается строкой после прочтения содержимого файла. Мы будем использовать async await для обработки фьючерсов. Вот код

import ‘dart:io’;
import ‘package:path/path.dart’ as p;
void main() async {
var filePath = p.join(Directory.current.path, 'assets', 'sample.txt');
File file = File(filePath);
var fileContent = await file.readAsString();
print(fileContent);
}

readAsLinesSync

Синхронно считывает все содержимое файла в виде строк текста, используя заданную кодировку.

file.readAsLinesSync();

Он возвращает List<String> с нашими строками текста, подобными этому

[some sample content inside, second line of content, third line]

чтение как строки

file.readAsLines();

Асинхронная версия предыдущего метода.

readAsBytesSync

file.readAsBytesSync();

Синхронно читать все содержимое файла в виде списка байтов.

вывод в консоль

[115, 111, 109, 101, 32, 115, 97, 109, 112, 108, 101, 32, 99, 111, 110, 116, 101, 110, 116, 32, 105, 110, 115, 105, 100, 101, 13, 10, 115, 101, 99, 111, 110, 100, 32, 108, 105, 110, 101, 32, 111, 102, 32, 99, 111, 110, 116, 101, 110, 116, 13, 10, 116, 104, 105, 114, 100, 32, 108, 105, 110, 101]

readAsBytes

file.readAsBytes();

Асинхронная версия предыдущего метода.

Мы обсудили все шесть методов.

Спасибо за чтение

Следите за нами на среде

Пожалуйста, подпишитесь на наш канал YouTube для получения аналогичного контента