Библиотека dart:io
Поддержка файлов, сокетов, HTTP и других операций ввода-вывода для серверных приложений.
Библиотека I/O используется для Dart серверных приложений, которые выполняются в автономной Dart VM из командной строки. Эта библиотека не работает в приложениях, основанных на браузере.
Эта библиотека позволяет работать с файлами, каталогами, сокетами, процессами, HTTP серверами и клиентами и многим другим.
Чтобы использовать эту библиотеку в вашем коде:
import 'dart:io';
Примечание: Многие операции, связанные с вводом-выводом, являются асинхронными и обрабатываются с помощью Future или Stream, оба из которых определены в dart:async библиотеке.
Файлы, каталоги и ссылки
Экземпляр File, Directory или Link соответственно представляет файл, каталог или ссылку в родной файловой системе.
Вы можете управлять файловой системой с помощью объектов этих типов. Например, вы можете переименовать файл или каталог:
File myFile = new File('myFile.txt');
myFile.rename('yourFile.txt').then((_) => print('file renamed'));
Многие методы классов File, Directory и Link работают асинхронно и возвращают Future.
FileSystemEntity
File, Directory и Link все расширяют FileSystemEntity. Помимо того, что это суперкласс для этих классов, FileSystemEntity имеет ряд статических методов для работы с путями.
Чтобы получить информацию о пути, вы можете использовать статические методы FileSystemEntity, такие как 'isDirectory', 'isFile' и 'exists'. Поскольку доступ к файловой системе включает в себя ввод-вывод, эти методы являются асинхронными и возвращают Future.
FileSystemEntity.isDirectory(myPath).then((isDir) {
if (isDir) {
print('$myPath is a directory');
} else {
print('$myPath is not a directory');
}
});
HttpServer и HttpClient
Классы HttpServer и HttpClient предоставляют функциональность HTTP сервера и HTTP клиента.
Класс HttpServer предоставляет базовые возможности для реализации HTTP сервера. Для некоторых более высоких уровней построения блоков мы рекомендуем использовать пакет pub shelf, который содержит набор классов высокого уровня, которые вместе с классом HttpServer в этой библиотеке упрощают реализацию HTTP серверов.
Process
Класс Process предоставляет способ запуска процесса на родной машине. Например, следующий код запускает процесс, который рекурсивно перечисляет файлы в web.
Process.start('ls', ['-R', 'web']).then((process) {
stdout.addStream(process.stdout);
stderr.addStream(process.stderr);
process.exitCode.then(print);
});
Использование start() возвращает Future, которое завершается объектом Process, когда процесс запущен. Этот объект Process позволяет взаимодействовать с процессом во время его работы. Использование run() возвращает Future, которое завершается объектом ProcessResult, когда запущенный процесс завершен. Этот объект ProcessResult собирает вывод и код выхода из процесса.
При использовании start(), необходимо прочитать все данные, поступающие по потокам stdout и stderr, иначе системные ресурсы не будут освобождены.
WebSocket
Класс WebSocket предоставляет поддержку протокола WebSocket. Это позволяет осуществлять двустороннюю связь между клиентским и серверным приложениями. Используйте класс WebSocket в библиотеке dart:html для веб-клиентов.
Веб-сокет-сервер использует обычный HTTP-сервер для принятия соединений WebSocket. Первоначальный обмен данными — это HTTP-запрос, который затем обновляется до соединения WebSocket. Сервер обновляет запрос с помощью WebSocketTransformer и прослушивает данные на возвращённом веб-сокете. Например, вот мини-сервер, который прослушивает данные 'ws' в WebSocket:
runZoned(() {
HttpServer.bind('127.0.0.1', 4040).then((server) {
server.listen((HttpRequest req) {
if (req.uri.path == '/ws') {
WebSocketTransformer.upgrade(req).then((socket) {
socket.listen(handleMsg);
});
}
});
});
},
onError: (e) => print("An error occurred."));
Клиент подключается к WebSocket с помощью метода connect() и URI, использующего протокол WebSocket. Клиент может записывать в WebSocket с помощью метода add(). Например,
WebSocket.connect('ws://127.0.0.1:4040/ws').then((socket) {
socket.add('Hello, World!');
});
Обратите внимание на пример dartiverse_search для пары клиент/сервер, которая использует WebSockets для связи.
Socket и ServerSocket
Клиенты и серверы используют Socket для связи с использованием протокола TCP. Используйте ServerSocket на стороне сервера и Socket на стороне клиента. Сервер создает сокет прослушивания с помощью метода bind() и затем прослушивает входящие подключения к сокету. Например:
ServerSocket.bind('127.0.0.1', 4041)
.then((serverSocket) {
serverSocket.listen((socket) {
socket.transform(UTF8.decoder).listen(print);
});
});
Клиент подключает сокет с помощью метода connect(), который возвращает Future. Использование write(), writeln(), или writeAll() — это самые простые способы отправки данных по сокету. Например:
Socket.connect('127.0.0.1', 4041).then((socket) {
socket.write('Hello, World!');
});
Помимо Socket и ServerSocket, доступны классы RawSocket и RawServerSocket для доступа к низкоуровневому асинхронному сокетному вводу-выводу.
Потоки стандартного вывода, ошибок и ввода
Эта библиотека предоставляет потоки стандартного вывода, ошибок и ввода, имеющие имена 'stdout', 'stderr' и 'stdin' соответственно.
Потоки stdout и stderr оба являются IOSink и имеют одинаковый набор методов и свойств.
Чтобы записать строку в 'stdout':
stdout.writeln('Hello, World!');
Чтобы записать список объектов в 'stderr':
stderr.writeAll([ 'That ', 'is ', 'an ', 'error.', '\n']);
Поток стандартного ввода — это настоящий Stream, поэтому он наследует свойства и методы из класса Stream.
Чтобы синхронно прочитать текст из командной строки (программа блокируется, ожидая ввода пользователя):
String inputText = stdin.readLineSync();
Другие ресурсы
Для ознакомления с вводом-выводом в Dart см. раздел dart:io в туре по библиотеке.
Чтобы узнать больше о вводе-выводе в Dart, обратитесь к туториалу о написании командных приложений.
Константы
- APPEND → dynamic
-
Режим открытия файла для чтения и записи в конец. Файл создается, если он еще не существует.
FileMode.APPEND - GZIP → GZipCodec
-
Экземпляр по умолчанию реализации GZipCodec.
const GZipCodec._default() - READ → dynamic
-
Режим открытия файла только для чтения.
FileMode.READ - SYSTEM_ENCODING → SystemEncoding
-
Текущее кодирование системы.
const SystemEncoding() - WRITE → dynamic
-
Режим открытия файла для чтения и записи. Файл перезаписывается, если он уже существует. Файл создается, если он еще не существует.
FileMode.WRITE - WRITE_ONLY → dynamic
-
Режим открытия файла только для записи. Файл перезаписывается, если он уже существует. Файл создается, если он еще не существует.
FileMode.WRITE_ONLY - WRITE_ONLY_APPEND → dynamic
-
Режим открытия файла только для записи в конец. Файл создается, если он еще не существует.
FileMode.WRITE_ONLY_APPEND - ZLIB → ZLibCodec
-
Экземпляр по умолчанию реализации ZLibCodec.
const ZLibCodec._default()
Типы
- BadCertificateCallback(
X509Certificate cr, String host, int port) → bool
Свойства
- exitCode → int чтение/запись
-
Получение глобального кода завершения для Dart VM.
- pid → int только для чтения
-
Возвращает PID текущего процесса.
- stderr → Stdout только для чтения
-
Поток стандартного вывода ошибок, записанных этой программой.
- stdin → Stdin только для чтения
-
Поток стандартного ввода, считываемый этой программой.
- stdout → Stdout только для чтения
-
Поток стандартного вывода, записываемый этой программой.
Функции
- exit(
int code) → void -
Немедленно завершить процесс Dart VM с заданным кодом завершения.
- sleep(
Duration duration) → void -
Засыпать на указанный в
durationсрок. - stdioType(
object) → StdioType -
Для потока возвращает, подключен ли он к файлу, каналу, терминалу или чему-то другому.
Перечисления
- FileLock
-
Тип блокировки при запросе блокировки файла.
- ProcessStartMode
-
Режимы запуска нового процесса.
Классы
- BytesBuilder
-
Создаёт список байтов, позволяя добавлять байты и списки байтов в конец.
- CompressionOptions
-
Класс CompressionOptions позволяет управлять параметрами сжатия WebSocket.
- ContentType
-
Представление типа контента. Экземпляр ContentType неизменяем.
- Cookie
-
Представление cookie. Для cookie, полученных сервером как значения заголовка Cookie, будут установлены только поля
nameиvalue. При создании cookie для заголовка «set-cookie» на сервере и при получении cookie в клиенте как заголовков «set-cookie» можно использовать все поля. - Datagram
-
Пакет Datagram. Данные, отправляемые и получаемые с помощью сокетов Datagram, содержат интернет-адрес и порт назначения или источника вместе с данными.
- DetachedSocket
-
При отделении сокета от
HttpServerилиHttpClientиз-за обновления HTTP-соединения могут быть уже прочитанные непрочитанные данные из сокета. Эти непрочитанные данные вместе с отсоединённым сокетом возвращаются в экземпляре этого класса. - Directory
-
Ссылка на каталог (или папку) в файловой системе.
- File
-
Ссылка на файл в файловой системе.
- FileMode
-
Режимы открытия файла.
- FileStat
-
Объект FileStat представляет результат вызова функции POSIX stat() для объекта файловой системы. Это неизменяемый объект, представляющий значения, сфотографированные вызовом stat().
- FileSystemCreateEvent
-
Событие файловой системы для вновь созданных объектов файловой системы.
- FileSystemDeleteEvent
-
Событие файловой системы для удаления объектов файловой системы.
- FileSystemEntity
- FileSystemEntityType
-
Тип сущности в файловой системе, такой как файл, каталог или ссылка.
- FileSystemEvent
-
Базовый класс событий, испускаемых FileSystemEntity.watch.
- FileSystemModifyEvent
-
Событие файловой системы для изменений объектов файловой системы.
- FileSystemMoveEvent
-
Событие файловой системы для перемещения объектов файловой системы.
- GZipCodec
-
Кодек GZipCodec кодирует сырые байты в сжатые байты GZip и декодирует сжатые байты GZip в сырые байты.
- HeaderValue
-
Представление значения заголовка в формате:
- HttpClient
-
Клиент, получающий контент, такой как веб-страницы, от сервера с использованием протокола HTTP.
- HttpClientBasicCredentials
-
Представляет данные для аутентификации по протоколу Basic.
- HttpClientCredentials
- HttpClientDigestCredentials
-
Представляет данные для аутентификации по протоколу Digest. Аутентификация по протоколу Digest поддерживается только для серверов, использующих алгоритм MD5 и уровень защиты (qop) «none» или «auth».
- HttpClientRequest
-
HTTP-запрос для подключения клиента.
- HttpClientResponse
-
HTTP-ответ для подключения клиента.
- HttpConnectionInfo
-
Информация об подключении HttpRequest, HttpResponse, HttpClientRequest или HttpClientResponse.
- HttpConnectionsInfo
-
Статистические данные о текущих подключениях сокетов HttpServer.
- HttpDate
-
Утилиты для работы с датами с использованием форматов дат HTTP.
- HttpHeaders
-
Заголовки для HTTP-запросов и ответов.
- HttpRequest
-
Объект на стороне сервера, содержащий контент и информацию об HTTP-запросе.
- HttpResponse
-
HTTP-ответ, который возвращает заголовки и данные с сервера клиенту в ответ на HTTP-запрос.
- HttpServer
-
Сервер, который предоставляет контент, такой как веб-страницы, с использованием протокола HTTP.
- HttpSession
- HttpStatus
-
HTTP-коды состояния.
- InternetAddress
-
Интернет-адрес.
- InternetAddressType
-
Тип InternetAddressType — это тип InternetAddress. В настоящее время поддерживаются IP-версия 4 (IPv4) и IP-версия 6 (IPv6).
- IOSink
-
Объединённый байтовый и текстовый вывод.
- Link
-
Объекты Link — это ссылки на ссылки файловой системы.
- NetworkInterface
-
Объект NetworkInterface представляет активный сетевой интерфейс текущей системы. Он содержит список InternetAddresses, привязанных к интерфейсу.
- OSError
-
Объект OSError содержит информацию об ошибке операционной системы.
- Platform
-
Информация об среде, в которой выполняется текущая программа.
- Process
-
Средство выполнения программы.
- ProcessInfo
-
ProcessInfo предоставляет методы для получения информации о текущем процессе.
- ProcessResult
-
ProcessResult представляет результат выполнения неинтерактивного процесса, запущенного с помощью Process.run или Process.runSync.
- ProcessSignal
-
В системах Posix ProcessSignal используется для отправки определенного сигнала дочернему процессу, см.
Process.kill. - RandomAccessFile
-
RandomAccessFileобеспечивает произвольный доступ к данным в файле. - RawDatagramSocket
-
RawDatagramSocket — это низкоуровневый интерфейс к UDP-сокету, предоставляющий доступ к сырым событиям, сигнализируемым системой. Это поток Stream объектов RawSocketEvent.
- RawSecureServerSocket
-
RawSecureServerSocket — это серверный сокет, предоставляющий поток низкоуровневых объектов RawSecureSocket.
- RawSecureSocket
-
RawSecureSocket предоставляет защищенное (SSL или TLS) сетевое соединение. Клиентские подключения к серверу предоставляются вызовом RawSecureSocket.connect. Защищенный сервер, созданный с помощью RawSecureServerSocket, также возвращает объекты RawSecureSocket, представляющие серверную часть защищенного соединения. Сертификат, предоставленный сервером, проверяется с использованием надёжных сертификатов, установленных в объекте SecurityContext. В стандартном объекте SecurityContext содержится встроенный набор надёжных корневых сертификатов для известных сертификационных центров.
- RawServerSocket
-
RawServerSocket представляет сокет прослушивания и предоставляет поток низкоуровневых объектов RawSocket для каждого подключенного соединения.
- RawSocket
-
RawSocket — это низкоуровневый интерфейс к сокету, предоставляющий доступ к сырым событиям, сигнализируемым системой. Это поток Stream объектов RawSocketEvent.
- RawSocketEvent
-
События для RawSocket.
- RawSynchronousSocket
-
Низкоуровневый класс для синхронного общения через TCP-сокет.
- RedirectInfo
-
Информация о перенаправлении.
- SecureServerSocket
-
SecureServerSocket — это серверный сокет, предоставляющий поток высокоуровневых объектов Socket.
- SecureSocket
-
Высокоуровневый класс для безопасного общения по TCP-сокету с использованием TLS и SSL. Класс SecureSocket предоставляет как интерфейс Stream, так и IOSink, что делает его идеальным для использования вместе с другими потоками Stream.
- SecurityContext
-
Объект, содержащий сертификаты, которым следует доверять при установлении защищённого клиентского соединения, и цепочку сертификатов и закрытый ключ для предоставления защищённого сервера.
- ServerSocket
-
Класс ServerSocket представляет сокет для прослушивания и предоставляет поток объектов Socket, по одному для каждого подключения к сокету для прослушивания.
- Socket
-
Высокоуровневый класс для общения по TCP-сокету.
- SocketDirection
-
Класс SocketDirection используется в качестве параметра для Socket.close и RawSocket.close для закрытия сокета в указанном направлении(ях).
- SocketOption
-
Класс SocketOption используется в качестве параметра для Socket.setOption и RawSocket.setOption для настройки поведения базового сокета.
- Stdin
-
Класс Stdin позволяет выполнять синхронные и асинхронные чтение со стандартного потока ввода.
- StdioType
-
Тип объекта, к которому подключён стандартный поток ввода-вывода.
- Stdout
-
Класс Stdout представляет IOSink для либо
stdoutилиstderr. - SystemEncoding
-
Кодировка системы — это текущая кодовая страница в Windows и UTF-8 в Linux и macOS.
- WebSocket
-
Объект двусторонней HTTP-связи для клиентских или серверных приложений.
- WebSocketStatus
-
Коды состояния WebSocket, используемые при закрытии подключения WebSocket.
- WebSocketTransformer
-
Класс WebSocketTransformer предоставляет возможность модернизировать HttpRequest до подключения WebSocket. Он поддерживает как модернизацию одного HttpRequest, так и модернизацию потока HttpRequest.
- X509Certificate
-
X509Certificate представляет сертификат SSL с доступами для получения полей сертификата.
- ZLibCodec
-
Класс ZLibCodec кодирует сырые байты в сжатые байты ZLib и декодирует сжатые байты ZLib в сырые байты.
- ZLibDecoder
-
Класс ZLibDecoder используется классами ZLibCodec и GZipCodec для распаковки данных.
- ZLibEncoder
-
Кодировщик ZLibEncoder используется классами ZLibCodec и GZipCodec для сжатия данных.
- ZLibOption
-
Предоставляет параметры ZLib для входных параметров.
Исключения / Ошибки
- CertificateException
-
Исключение, возникающее на стадии рукопожатия при установлении защищённого сетевого соединения, при поиске или проверке сертификата.
- FileSystemException
-
Исключение, генерируемое при неудачном выполнении операции с файлами.
- HandshakeException
-
Исключение, возникающее на стадии рукопожатия при установлении защищённого сетевого соединения.
- HttpException
- IOException
-
Базовый класс для всех исключений, связанных с вводом-выводом.
- ProcessException
- RedirectException
- SignalException
- SocketException
- StdinException
- StdoutException
- TlsException
-
Исключение, связанное с безопасной сетью, вызванное ошибкой в протоколе TLS/SSL.
- WebSocketException
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-io/dart-io-library.html