dart:io

非 Web 应用程序的文件、套接字、HTTP以及其他 I/O 支持。

重要:基于浏览器的应用程序无法使用此库。以下内容可以导入和使用 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 服务器,请参阅 Write HTTP servers on dart.dev

Process

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."));

客户端使用WebSocket.connect方法和一个使用WebSocket协议的URI通过连接到WebSocket。客户端可以使用WebSocket.add方法将数据写入WebSocket。例如,

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

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

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()方法连接一个Socket,它返回一个Future。使用write()writeln()writeAll()是最简单的发送数据到套接字的方式。例如

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

除了SocketServerSocket之外,还有RawSocketRawServerSocket类可以用于更底层的异步套接字I/O访问。

标准输出、错误和输入流

该库提供了标准输出、错误和输入流,分别命名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
表示header value的形式
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
HttpRequestHttpRequest.session
HttpStatus
HTTP状态码。导出在dart:io和dart:html中。
InternetAddress
一个互联网地址或一个Unix域地址。
InternetAddressType
InternetAddress的类型,或地址族。
IOOverrides
backing various APIs of dart:io with mock implementations.
IOSink
一个combined byte and text output。
对文件系统链接的引用。
NetworkInterface
一个代表当前系统上的活动网络接口的网络接口。它包含了一个列表的InternetAddress,这些地址绑定到该接口。
Pipe
一个匿名管道,可以用来以单向方式发送数据,即写入write的数据可以通过read来读取。
Platform
有关当前程序运行环境的信息。
Process
执行程序的方式。
ProcessInfo
用于检索当前进程信息的各种方法。
ProcessResult
使用Process.runProcess.runSync启动的非交互式进程的结果。
进程信号
在Posix系统中,进程信号用于向子进程发送特定信号,参见Process.kill
进程启动模式
运行新进程的模式。
随机访问文件
对文件中的数据进行随机访问。
原始数据报套接字
一个未缓存的向UDP套接字提供接口。
原始安全服务器套接字
一个提供一系列低级原始安全套接字的服务器套接字。
原始安全套接字
原始安全套接字提供一个安全的(SSL或TLS)网络连接。
原始服务器套接字
一个监听套接字。
原始套接字
一个TCP连接。
原始套接字事件
用于原始数据报套接字原始安全套接字原始套接字的事件。
原始套接字选项
原始套接字选项作为参数使用于Socket.setRawOptionRawSocket.setRawOption以定制底层数据传输套接字的操作。
原始同步套接字
一个用于通过TCP套接字以同步方式通信的低级类。
原始ZLib过滤器
原始ZLib过滤器类提供了对zlib的底层接口。
读取管道
Pipe.create创建的Pipe的"读取"端。
重定向信息
重定向信息。
资源句柄
一个围绕OS资源句柄的包装器,以便它可以通过Socket作为SocketMessage的一部分进行传递。
SameSite
Cookie跨站可用性配置。
安全服务器套接字
一个 提供Socket流的服务器套接字。
安全套接字
使用TLS和SSL的TCP套接字。
安全上下文
包含信任的证书的孔对象,当建立安全的客户端连接时,以及用于安全服务器的证书链和私钥。
服务器套接字
一个监听套接字。
套接字
两个套接字之间的TCP连接。
套接字控制消息
RawSocket.readMessage调用接收到SocketMessage的控制消息部分。
套接字方向
SocketDirection用作Socket.closeRawSocket.close的参数,以在指定方向上关闭套接字。
套接字消息
原始数据报套接字接收到套接字消息。
套接字选项
套接字的选项,它通过Socket.setOption进行配置。
stdin
进程的标准输入流。
StdioType
标准IO流可以附加的对象类型。
stdout
连接到进程标准输出或错误的IOSink
SystemEncoding
系统编码是Windows上的当前代码页和Linux及Mac上的UTF-8。
WebSocket
一个双向HTTP通信对象,用于客户端或服务器应用。
WebSocketStatus
在关闭WebSocket连接时使用的WebSocket状态代码。
WebSocketTransformer
WebSocketTransformer提供将HttpRequest升级到WebSocket连接的能力。它支持将单个HttpRequest升级和将HttpRequest流升级。
写入管道
Pipe.create创建的Pipe的"写入"端。
X509Certificate
X509Certificate表示一个SSL证书,提供访问证书字段的访问器。
ZLibCodec
ZLibCodec将原始字节编码为ZLib压缩字节,并将ZLib压缩字节解码为原始字节。
ZLibDecoder
《ZLibDecoder》由《ZLibCodec》和《GZipCodec》用于解压缩数据。详情
《ZLibEncoder》
《ZLibEncoder》编码器由《ZLibCodec》和《GZipCodec》用于压缩数据。详情
《ZLibOption》
公开输入参数的ZLib选项。

枚举

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

常量

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

属性

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

函数

exit(int code) → Never
使用所提供的退出代码立即退出Dart VM进程。
sleep(Duration duration) → void
等待由《duration》指定的时长。
stdioType(dynamic object) StdioType
判断一个流是否连接到文件、管道、终端或其他。

typedef

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