dart:io 库
非 Web 应用程序的文件、套接字、HTTP以及其他 I/O 支持。
重要:基于浏览器的应用程序无法使用此库。以下内容可以导入和使用 dart:io 库:
- 服务器
- 命令行脚本
- Flutter 移动应用
- Flutter 桌面应用
此库允许您处理文件、目录、套接字、进程、HTTP 服务器和客户端等。许多与输入和输出相关的操作都是异步的,并使用 Future 或 Stream 来处理,这两个类均在 dart:async 库 中定义。
要在代码中使用 dart:io 库
import 'dart:io';
有关 Dart 中 I/O 的介绍,请参阅 dart:io 库之旅。
文件、目录和链接
File、Directory 或 Link 的实例分别表示在本地文件系统中对应的文件、目录或链接。
您可以通过这些类型的对象操作文件系统。例如,您可以重命名文件或目录。
File myFile = File('myFile.txt');
myFile.rename('yourFile.txt').then((_) => print('file renamed'));
File、Directory 和 Link 类提供的许多方法都是异步的,并返回一个 Future。
FileSystemEntity
File、Directory 和 Link 都扩展了 FileSystemEntity。除了是这些类的超类外,FileSystemEntity 还具有许多用于处理路径的静态方法。
要获取有关路径的信息,您可以使用如:FileSystemEntity 的静态方法,例如 FileSystemEntity.isDirectory、FileSystemEntity.isFile 和 FileSystemEntity.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
HttpClient 和 HttpServer 类提供了底层的 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.stdout 和 Process.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!');
});
除了Socket和ServerSocket之外,还有RawSocket和RawServerSocket类可以用于更底层的异步套接字I/O访问。
标准输出、错误和输入流
该库提供了标准输出、错误和输入流,分别命名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();
类
- BytesBuilder
- 构建字节列表,允许在末尾添加字节和字节列表。
- CompressionOptions
- 控制WebSocket中压缩的选项。
-
ConnectionTask<
S> - 一个可取消的连接尝试。
- ContentType
- 用于HttpHeaders.contentTypeHeader报头值的MIME/IANA媒体类型。
- Cookie
- cookie的表示形式。对于仅作为Cookie头值接收的cookie,只有name和value属性将被设置。当在服务器上构建用于“set-cookie”头部的cookie以及客户端接收作为“set-cookie”头的cookie时,所有字段都可以使用。
- Datagram
- 由RawDatagramSocket接收的数据包。
- Directory
- 对文件系统上一个目录(或文件夹)的引用。
- File
- 对文件系统上一个文件的引用。
- FileLock
- 请求文件锁时的锁类型。
- FileMode
- 文件可以打开的模式。
- FileStat
- 在文件系统对象上调用POSIX
stat()
函数的结果。 - FileSystemCreateEvent
- 用于新创建文件系统对象的文件系统事件。
- FileSystemDeleteEvent
- 用于删除文件系统对象的文件系统事件。
- FileSystemEntity
- 是File、Directory和Link等类的通用超类。
- 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
- 有关HttpRequest、HttpResponse、HttpClientRequest或HttpClientResponse连接的信息。
- HttpConnectionsInfo
- 关于当前HttpServer的套接字连接的概要统计信息。
- HttpDate
- 用于处理具有HTTP特定日期格式的日期的实用函数。
- HttpHeaders
- HTTP请求和响应的头部。
- HttpOverrides
- 这个类通过模拟实现来代理HttpClient。它应由客户端代码中的另一个类扩展,并具有构建模拟实现的覆盖。在这个基类中的实现默认为实际的HttpClient实现。例如
- HttpRequest
- 包含HTTP请求内容和信息的服务器端对象。
- HttpResponse
- HTTP响应,在响应HTTP请求时从服务器返回到客户端的头部和数据。
- HttpServer
- 使用HTTP协议发送内容的服务器,如网页。
- HttpSession
- HttpRequest的HttpRequest.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。
- Link
- 对文件系统链接的引用。
- NetworkInterface
- 一个代表当前系统上的活动网络接口的网络接口。它包含了一个列表的InternetAddress,这些地址绑定到该接口。
- Pipe
- 一个匿名管道,可以用来以单向方式发送数据,即写入write的数据可以通过read来读取。
- Platform
- 有关当前程序运行环境的信息。
- Process
- 执行程序的方式。
- ProcessInfo
- 用于检索当前进程信息的各种方法。
- ProcessResult
- 使用Process.run或Process.runSync启动的非交互式进程的结果。
- 进程信号
- 在Posix系统中,进程信号用于向子进程发送特定信号,参见
Process.kill
。 - 进程启动模式
- 运行新进程的模式。
- 随机访问文件
- 对文件中的数据进行随机访问。
- 原始数据报套接字
- 一个未缓存的向UDP套接字提供接口。
- 原始安全服务器套接字
- 一个提供一系列低级原始安全套接字的服务器套接字。
- 原始安全套接字
-
原始安全套接字
提供一个安全的(SSL或TLS)网络连接。 - 原始服务器套接字
- 一个监听套接字。
- 原始套接字
- 一个TCP连接。
- 原始套接字事件
- 用于原始数据报套接字、原始安全套接字和原始套接字的事件。
- 原始套接字选项
- 原始套接字选项作为参数使用于Socket.setRawOption和RawSocket.setRawOption以定制底层数据传输套接字的操作。
- 原始同步套接字
- 一个用于通过TCP套接字以同步方式通信的低级类。
- 原始ZLib过滤器
- 原始ZLib过滤器类提供了对zlib的底层接口。
- 读取管道
- 由Pipe.create创建的Pipe的"读取"端。
- 重定向信息
- 重定向信息。
- 资源句柄
- 一个围绕OS资源句柄的包装器,以便它可以通过Socket作为SocketMessage的一部分进行传递。
- SameSite
- Cookie跨站可用性配置。
- 安全服务器套接字
- 一个 提供Socket流的服务器套接字。
- 安全套接字
- 使用TLS和SSL的TCP套接字。
- 安全上下文
- 包含信任的证书的孔对象,当建立安全的客户端连接时,以及用于安全服务器的证书链和私钥。
- 服务器套接字
- 一个监听套接字。
- 套接字
- 两个套接字之间的TCP连接。
- 套接字控制消息
- 由RawSocket.readMessage调用接收到SocketMessage的控制消息部分。
- 套接字方向
- SocketDirection用作Socket.close和RawSocket.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的默认实现的一个实例。
属性
函数
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