dart:io

为非 Web 应用程序提供文件、套接字、HTTP 等输入/输出支持。

重要:基于浏览器的应用程序无法使用此库。只有以下内容可以导入和使用 dart:io 库

  • 服务器
  • 命令行脚本
  • Flutter 移动应用程序
  • Flutter 桌面应用程序

此库允许您处理文件、目录、套接字、进程、HTTP 服务器和客户端等。许多与输入/输出相关的操作都是异步的,并使用 FutureStream 处理,这两个都在 dart:async 库 中定义。

在您的代码中使用 dart:io 库

import 'dart:io';

有关 Dart 中 I/O 的简介,请参阅 dart:io 库之旅

FileDirectoryLink 的实例分别代表原生文件系统中相应文件、目录或链接。

您可以通过这些类型的对象操作文件系统。例如,您可以重命名文件或目录

File myFile = File('myFile.txt');
myFile.rename('yourFile.txt').then((_) => print('file renamed'));

FileDirectoryLink 类提供的方法很多都是异步的,并返回一个 Future

FileSystemEntity

FileDirectoryLink 都扩展了 FileSystemEntity。除了作为这些类的超类外,FileSystemEntity 还提供了一些用于处理路径的静态方法。

要获取有关路径的信息,您可以使用 FileSystemEntity 静态方法,如 FileSystemEntity.isDirectoryFileSystemEntity.isFileFileSystemEntity.exists。由于文件系统访问涉及 I/O,这些方法是异步的,并返回一个 Future

FileSystemEntity.isDirectory(myPath).then((isDir) {
  if (isDir) {
    print('$myPath is a directory');
  } else {
    print('$myPath is not a directory');
  }
});

HttpServer 和 HttpClient

HttpClientHttpServer 类提供了低级的 HTTP 功能。

考虑使用在包中找到的更友好且可组合的 API,而不是直接使用这些类。

对于 HTTP 客户端,请参阅 package:http

对于 HTTP 服务器,请参阅 在 dart.dev 上编写 HTTP 服务器

进程

Process 类提供了一种在原生机器上运行进程的方法。例如,以下代码生成了一个进程,该进程递归列出 web 下的文件。

Process.start('ls', ['-R', 'web']).then((process) {
  stdout.addStream(process.stdout);
  stderr.addStream(process.stderr);
  process.exitCode.then(print);
});

使用 Process.start 返回一个 Future,当进程启动时,该 Process 对象完成。这个 Process 对象允许您在进程运行时与之交互。使用 Process.run 返回一个 Future,当启动的进程终止时,该 ProcessResult 对象完成。这个 ProcessResult 对象收集进程的输出和退出码。

使用 Process.start 时,您需要读取 Process.stdoutProcess.stderr 流中所有传入的数据,否则系统资源不会被释放。

WebSocket

WebSocket 类提供了对 WebSocket 协议的支持。这允许客户端和服务器应用程序之间进行全双工通信。

WebSocket服务器使用普通的HTTP服务器来接受WebSocket连接。初始握手是一个HTTP请求,然后升级为WebSocket连接。服务器使用WebSocketTransformer来升级请求,并监听返回的WebSocket上的数据。例如,这里有一个监听WebSocket上'ws'数据的迷你服务器

runZoned(() async {
  var server = await HttpServer.bind('127.0.0.1', 4040);
  server.listen((HttpRequest req) async {
    if (req.uri.path == '/ws') {
      var socket = await WebSocketTransformer.upgrade(req);
      socket.listen(handleMsg);
    }
  });
}, onError: (e) => print("An error occurred."));

客户端使用WebSocketWebSocket.connect方法和使用WebSocket协议的URI来连接WebSocket。客户端可以使用WebSocketWebSocket.add方法写入数据。例如,

var socket = await WebSocket.connect('ws://127.0.0.1:4040/ws');
socket.add('Hello, World!');

查看websocket_sample应用程序,该程序使用WebSocket与服务器进行通信。

套接字和服务器套接字

客户端和服务器使用Socket通过TCP协议进行通信。服务器端使用ServerSocket,客户端使用Socket。服务器使用bind()方法创建一个监听套接字,然后在该套接字上监听传入的连接。例如

ServerSocket.bind('127.0.0.1', 4041)
  .then((serverSocket) {
    serverSocket.listen((socket) {
      socket.transform(utf8.decoder).listen(print);
    });
  });

客户端使用connect()方法连接Socket,它返回一个Future。使用write()writeln()writeAll()是发送数据的简单方法。例如

Socket.connect('127.0.0.1', 4041).then((socket) {
  socket.write('Hello, World!');
});

除了SocketServerSocket之外,还有RawSocketRawServerSocket类可用于对异步套接字IO进行低级访问。

标准输出、错误和输入流

此库提供了标准输出、错误和输入流,分别命名为stdoutstderrstdin

stdoutstderr流都是IOSink,具有相同的方法和属性集。

要将字符串写入stdout

stdout.writeln('Hello, World!');

要将对象列表写入stderr

stderr.writeAll([ 'That ', 'is ', 'an ', 'error.', '\n']);

标准输入流是一个真正的Stream,因此它继承了Stream类的属性和方法。

要从命令行同步读取文本(程序会阻塞,等待用户输入信息)

String? inputText = stdin.readLineSync();

BytesBuilder
构建一个字节数组,允许在末尾添加字节数组和字节数组列表。
CompressionOptions
控制WebSocket中压缩的选项。
ConnectionTask<S>
一个可取消的连接尝试。
ContentType
用作HttpHeaders.contentTypeHeader头值的MIME/IANA媒体类型。
cookie的表示。对于服务器作为Cookie头值接收的cookie,只有namevalue属性将被设置。当在服务器中构建用于'set-cookie'头的cookie以及当客户端作为'set-cookie'头接收cookie时,可以使用所有字段。
Datagram
RawDatagramSocket接收的数据包。
Directory
对文件系统上的目录(或文件夹)的引用。
File
对文件系统上的文件的引用。
FileLock
请求对文件加锁的类型。
FileMode
文件可以打开的模式。
FileStat
在文件系统对象上调用POSIX stat()函数的结果。
FileSystemCreateEvent
文件系统事件,用于新创建的文件系统对象。
FileSystemDeleteEvent
文件系统事件,用于删除文件系统对象。
FileSystemEntity
FileDirectoryLink 的公共超类。
FileSystemEntityType
文件系统实体(如文件、目录或链接)的类型。
FileSystemEvent
FileSystemEntity.watch 发射的基事件类。
FileSystemModifyEvent
文件系统事件,用于文件系统对象的修改。
FileSystemMoveEvent
文件系统事件,用于文件系统对象的移动。
GZipCodec
GZipCodec 用于将原始字节编码为 GZip 压缩字节,并将 GZip 压缩字节解码为原始字节。
HeaderValue
以以下形式表示头值:
HttpClient
用于与 HTTP 服务器通信的 HTTP 客户端。
HttpClientBasicCredentials
表示基本认证凭据。
HttpClientCredentials
HttpClientDigestCredentials
表示摘要认证凭据。摘要认证仅适用于使用 MD5 算法和“none”或“auth”质量保护(qop)的服务器。
HttpClientRequest
客户端连接的 HTTP 请求。
HttpClientResponse
客户端连接的 HTTP 响应。
HttpConnectionInfo
HttpRequestHttpResponseHttpClientRequestHttpClientResponse 连接的信息。
HttpConnectionsInfo
关于当前 HttpServer 的当前套接字连接的摘要统计信息。
HttpDate
用于处理具有特定 HTTP 日期格式的日期的实用程序函数。
HttpHeaders
HTTP 请求和响应的头部。
HttpOverrides
此类简化了使用模拟实现覆盖 HttpClient 的操作。它应在客户端代码中的另一个类中扩展,该类具有覆盖构建模拟实现的构造函数。此基类的实现默认为实际的 HttpClient 实现。例如
HttpRequest
包含 HTTP 请求的内容和信息的服务器端对象。
HttpResponse
HTTP 响应,它返回服务器对 HTTP 请求的响应中的头和数据。
HttpServer
使用 HTTP 协议提供内容的服务器。
HttpSession
HttpRequestsession
HttpStatus
HTTP 状态代码。导出在 dart:io 和 dart:html。
InternetAddress
Internet 地址或 Unix 域地址。
InternetAddressType
InternetAddress 的类型或地址族。
IOOverrides
覆盖 dart:io 的各种 API 的模拟实现设施。
IOSink
一个结合了字节和文本输出的输出。
文件系统链接的引用。
NetworkInterface
NetworkInterface 表示当前系统上的活动网络接口。它包含绑定到接口的 InternetAddress 列表。
Pipe
一个匿名管道,可用于单方向发送数据,即写入 write 的数据可以使用 read 读取。
Platform
有关当前程序运行环境的信息。
进程
执行程序的方式。
ProcessInfo
用于检索有关当前进程的信息的方法。
ProcessResult
使用 Process.runProcess.runSync 启动的不交互式进程的结果。
ProcessSignal
在Posix系统中,使用ProcessSignal发送特定信号到子进程,请参阅Process.kill
ProcessStartMode
运行新进程的模式。
RandomAccessFile
对文件中的数据进行随机访问。
RawDatagramSocket
UDP套接字的非缓冲接口。
RawSecureServerSocket
提供低级RawSecureSocket流的服务器套接字。
RawSecureSocket
RawSecureSocket提供安全的(SSL或TLS)网络连接。
RawServerSocket
监听套接字。
RawSocket
TCP连接。
RawSocketEvent
用于RawDatagramSocketRawSecureSocketRawSocket的事件。
RawSocketOption
RawSocketOption用作Socket.setRawOptionRawSocket.setRawOption的参数,以自定义底层套接字的行为。
RawSynchronousSocket
一个用于通过TCP套接字同步通信的低级类。
RawZLibFilter
RawZLibFilter类提供对zlib的低级接口。
ReadPipe
Pipe.create创建的Pipe的“读取”端。
RedirectInfo
重定向信息。
ResourceHandle
ResourceHandle是围绕OS资源句柄的包装,以便它可以作为SocketMessage的一部分通过套接字传递。
SameSite
Cookie跨站可用性配置。
SecureServerSocket
提供高级Socket流的服务器套接字。
SecureSocket
使用TLS和SSL的TCP套接字。
SecurityContext
包含用于建立安全客户端连接时信任的证书的对象,以及从安全服务器提供的服务器证书链和私钥。
ServerSocket
监听套接字。
Socket
两个套接字之间的TCP连接。
SocketControlMessage
是调用RawSocket.readMessage时接收到的SocketMessage的控制消息部分。
SocketDirection
SocketDirection用作Socket.closeRawSocket.close的参数,以关闭指定方向(s)的套接字。
SocketMessage
RawDatagramSocket接收的套接字消息。
SocketOption
套接字的选项,它使用Socket.setOption进行配置。
Stdin
进程的标准输入流。
StdioType
标准IO流可以附加到的对象类型。
Stdout
连接到进程的标准输出或错误的IOSink
SystemEncoding
系统编码在Windows上是当前代码页,在Linux和Mac上是UTF-8。
TlsProtocolVersion
传输层安全性(TLS)版本。
WebSocket
用于客户端或服务器应用程序的双向HTTP通信对象。
WebSocketStatus
在关闭WebSocket连接时使用的WebSocket状态码。
WebSocketTransformer
WebSocketTransformer提供将HttpRequest升级到WebSocket连接的能力。它支持升级单个HttpRequest以及升级HttpRequest流。
WritePipe
Pipe.create创建的Pipe的“写入”端。
X509Certificate
X509Certificate表示SSL证书,并提供访问证书字段的访问器。
ZLibCodec
The ZLibCodec 将原始字节编码为 ZLib 压缩字节,并将 ZLib 压缩字节解码为原始字节。
ZLibDecoder
ZLibDecoderZLibCodecGZipCodec 用于解压缩数据。
ZLibEncoder
ZLibEncoder 编码器由 ZLibCodecGZipCodec 用于压缩数据。
ZLibOption
公开 ZLib 选项作为输入参数。

枚举

HttpClientResponseCompressionState
枚举,用于指定 HttpClientResponse 字节流的压缩状态。

常量

gzip → const GZipCodec
默认 GZipCodec 实现的一个实例。
systemEncoding → const SystemEncoding
当前系统编码。
zlib → const ZLibCodec
默认 ZLibCodec 实现的一个实例。

属性

exitCode int
获取 Dart VM 的全局退出代码。
getter/setter 对
pid int
返回当前进程的 PID。
无设置器
stderr Stdout
此程序写入错误的标准输出流。
无设置器
stdin Stdin
此程序读取数据的标准输入流。
无设置器
stdout Stdout
此程序写入数据的标准输出流。
无设置器

函数

exit(int code) → Never
使用给定的退出代码立即退出 Dart VM 进程。
sleep(Duration duration) → void
duration 指定的时间内休眠。
stdioType(dynamic object) StdioType
一个流是否连接到文件、管道、终端或其他。

类型别名

BadCertificateCallback = bool Function(X509Certificate cr, String host, int port)

异常/错误

CertificateException
在建立安全网络连接的握手阶段,查找或验证证书时发生的异常。
FileSystemException
当文件操作失败时抛出的异常。
HandshakeException
在建立安全网络连接握手阶段发生的异常。
HttpException
IOException
所有IO相关异常的基类。
OSError
包含操作系统错误信息的异常
PathAccessException
当文件操作因必要的访问权限不可用而失败时抛出的异常。
PathExistsException
当文件操作因目标路径已存在而失败时抛出的异常。
PathNotFoundException
当文件操作因文件或目录不存在而失败时抛出的异常。
ProcessException
RedirectException
SignalException
SocketException
当套接字操作失败时抛出的异常。
StdinException
Stdin的一些操作抛出的异常。
StdoutException
Stdout的一些操作抛出的异常。
TlsException
由TLS/SSL协议失败引起的安全网络异常。
WebSocketException