Ссылка
import 'dart:io';Code language: JavaScript (javascript)
Важное замечание
dart:io не работает на веб-платформе!
Поддерживается: консольные приложения Dart, серверы, Flutter-приложения кроме веб (Android/iOS/Windows/macOS/Linux).
Операции с файлами и каталогами
FileSystemEntity — родительский класс; File (файл) и Directory (каталог) наследуют его.
1. Чтение файлов
Полное чтение (подходит для небольших файлов)
void main() async {
var file = File("config.txt");
try {
// Прочитать всё содержимое как строку UTF-8
String content = await file.readAsString();
// Прочитать и разделить содержимое по строкам
List<String> lines = await file.readAsLines();
// Бинарное чтение в виде массива байт List<int>
List<int> bytes = await file.readAsBytes();
} catch (e) {
print("Ошибка чтения файла: $e");
}
}Code language: Dart (dart)
Полный рабочий пример
Создайте текстовый файл и исправьте путь: D:/dartdemo/firstdart/bin/config.txt
import 'dart:io';
void main() async {
var file = File("D:/dartdemo/firstdart/bin/config.txt");
try {
String content = await file.readAsString();
print("===== readAsString Полный текст =====");
print(content);
List<String> lines = await file.readAsLines();
print("\n===== readAsLines Построчное чтение =====");
for (var line in lines) {
print(line);
}
List<int> bytes = await file.readAsBytes();
print("\n===== readAsBytes Массив байт (первые 30) =====");
print(bytes.take(30).toList());
print("Общий размер файла в байтах: ${bytes.length}");
} catch (e) {
print("Ошибка чтения файла: $e");
}
}Code language: Dart (dart)
Результат запуска
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
===== readAsString Полный текст =====
The minimal requirements for a library are:
pubspec file
The pubspec.yaml file for a library is the same as for an application package
—there is no special designation to indicate that the package is a library.
lib directory
As you might expect, the library code lives under the lib directory and is public to other packages. You can create any hierarchy under lib, as needed. By convention, implementation code is placed under lib/src. Code under lib/src is considered private; other packages should never need to import src/.... To make APIs under lib/src public, you can export lib/src files from a file that's directly under lib.
===== readAsLines Построчное чтение =====
The minimal requirements for a library are:
pubspec file
The pubspec.yaml file for a library is the same as for an application package
—there is no special designation to indicate that the package is a library.
lib directory
As you might expect, the library code lives under the lib directory and is public to other packages. You can create any hierarchy under lib, as needed. By convention, implementation code is placed under lib/src. Code under lib/src is considered private; other packages should never need to import src/.... To make APIs under lib/src public, you can export lib/src files from a file that's directly under lib.
===== readAsBytes Массив байт (первые 30) =====
[84, 104, 101, 32, 109, 105, 110, 105, 109, 97, 108, 32, 114, 101, 113, 117, 105, 114, 101, 109, 101, 110, 116, 115, 32, 102, 111, 114, 32, 97]
Общий размер файла в байтах: 644Code language: PHP (php)
Потоковое чтение
Рекомендуется для больших файлов: обработка данных по мере поступления
Совместно с декодерами из dart:convert, возвращает Stream<List<int>>
import 'dart:io';
import 'dart:convert';
void main() async {
var file = File("D:/dartdemo/firstdart/bin/config.txt");
Stream<List<int>> stream = file.openRead();
var lineStream = stream
.transform(utf8.decoder)
.transform(const LineSplitter());
try {
await for (var line in lineStream) {
print(line);
}
print("Чтение завершено");
} catch (e) {
print(e);
}
}Code language: Dart (dart)
Результат запуска
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
The minimal requirements for a library are:
pubspec file
The pubspec.yaml file for a library is the same as for an application package
—there is no special designation to indicate that the package is a library.
lib directory
As you might expect, the library code lives under the lib directory and is public to other packages.
You can create any hierarchy under lib, as needed. By convention, implementation code is placed under lib/src.
Code under lib/src is considered private; other packages should never need to import src/.... To make APIs under lib/src public,
you can export lib/src files from a file that's directly under lib.
Чтение завершеноCode language: PHP (php)
2. Запись файлов (IOSink)
import 'dart:io';
void main() async {
var logFile = File("log.txt");
// FileMode.write: перезаписать существующее содержимое (по умолчанию)
var sink = logFile.openWrite(mode: FileMode.write);
sink.write("Содержимое журнала\n");
sink.add([48,49]); // Запись бинарных байт
await sink.flush(); // Очистить буфер
await sink.close(); // Обязательно закрыть
// Режим добавления в конец
// var sink = logFile.openWrite(mode: FileMode.append);
}Code language: Dart (dart)
После запуска
В папке проекта D:\dartdemo\firstdart создаётся файл log.txt

Доступные режимы:
FileMode.write: создать и перезаписатьFileMode.append: добавить в конец файлаFileMode.writeOnly/readWriteрежимы чтения-записи
3. Обход каталога
Directory.list() возвращает поток для перечисления всех файлов и папок
void main() async {
var dir = Directory("./tmp");
try {
var entityStream = dir.list();
await for (FileSystemEntity entity in entityStream) {
if (entity is File) {
print("Файл: ${entity.path}");
} else if (entity is Directory) {
print("Каталог: ${entity.path}");
}
}
} catch (e) {
print(e);
}
}Code language: Dart (dart)
4. Частые операции с файлами и каталогами
var f = File("test.txt");
await f.create(); // Создать файл
await f.delete(); // Удалить файл
await f.length(); // Получить размер в байтах
var d = Directory("data");
await d.create(recursive: true); // Рекурсивно создать подкаталоги
await d.delete(recursive: true); // Рекурсивно удалить каталогCode language: JavaScript (javascript)
HTTP-сервер HttpServer
Позволяет создать веб-сервер на Dart, слушать порт и обрабатывать запросы.
void main() async {
// Привязать адрес и порт
HttpServer server = await HttpServer.bind("localhost", 8888);
print("Сервер запущен http://localhost:8888");
await for (HttpRequest request in server) {
handleRequest(request);
}
}
void handleRequest(HttpRequest req) {
HttpResponse res = req.response;
if (req.uri.path == "/dart") {
res.headers.contentType = ContentType.text;
res.write("Hello Dart HttpServer");
} else {
res.statusCode = HttpStatus.notFound;
}
res.close(); // Ответ обязательно закрыть для отправки данных
}Code language: JavaScript (javascript)
Конкретный пример
import 'dart:io';
void main() async {
HttpServer server = await HttpServer.bind("localhost", 8888);
print("Сервер запущен http://localhost:8888");
print("Адрес доступа: http://localhost:8888/dart");
await for (HttpRequest request in server) {
handleRequest(request);
}
}
void handleRequest(HttpRequest req) {
HttpResponse res = req.response;
if (req.uri.path == "/dart") {
res.headers.contentType = ContentType.text;
res.write("Hello Dart HttpServer");
} else if (req.uri.path == "/") {
res.headers.contentType = ContentType.text;
res.write("Главная страница! Перейдите по /dart");
} else {
res.statusCode = HttpStatus.notFound;
res.write("404 Not Found");
}
res.close();
}Code language: Dart (dart)
Откройте в браузере: localhost:8888/dart

HTTP-клиент HttpClient
Важная официальная рекомендация: избегайте прямого использования HttpClient!
HttpClientвнутри использует dart:io, кроссплатформенная совместимость ограничена. Для проектов используйте сторонний пакетpackage:http.
Упрощённый пример для ознакомления:
void main() async {
var client = HttpClient();
try {
var req = await client.getUrl(Uri.parse("https://foxdevelop.com"));
var res = await req.close();
await for(var chunk in res) {
// Получение потока байт ответа
}
} finally {
client.close();
}
}Code language: Dart (dart)
Полный исполняемый пример
import 'dart:io';
import 'dart:convert';
void main() async {
var client = HttpClient();
try {
var req = await client.getUrl(Uri.parse("https://foxdevelop.com"));
var res = await req.close();
List<int> allBytes = [];
await for (var chunk in res) {
allBytes.addAll(chunk);
}
String html = utf8.decode(allBytes);
print(html);
} finally {
client.close();
}
}Code language: Dart (dart)
dart:io