dart:io library

对非Web应用程序的文件,套接字,HTTP和其他I / O支持.

重要提示:基于浏览器的应用程序不能使用此库. 只有服务器,命令行脚本和Flutter移动应用程序才能导入和使用dart:io.

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

要在代码中使用dart:io库,请执行以下操作:

import 'dart:io';

有关Dart中I / O的介绍,请参见dart:io库导览 .

FileDirectoryLink的实例分别表示本机文件系统中的文件,目录或链接.

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

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

File,Directory和Link类提供的许多方法都是异步运行的,并返回Future.

FileSystemEntity

文件,目录和链接都扩展了FileSystemEntity . 除了作为这些类的超类之外,FileSystemEntity还具有许多用于处理路径的静态方法.

要获取有关路径的信息,可以使用FileSystemEntity静态方法,例如" isDirectory"," isFile"和" exists". 由于文件系统访问涉及I / O,因此这些方法是异步的,并返回Future.

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

HttpServer and HttpClient

HttpServerHttpClient类提供HTTP服务器和HTTP客户端功能.

HttpServer类提供用于实现HTTP服务器的基本功能. 对于某些更高级别的构建块,我们建议您尝试使用架子发布程序包,该程序包包含一组高级类,这些类与该库中的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类提供对Web套接字协议的支持. 这允许客户端和服务器应用程序之间的全双工通信.

Web套接字服务器使用普通的HTTP服务器来接受Web套接字连接. 最初的握手是一个HTTP请求,然后将其升级为Web套接字连接. 服务器使用WebSocketTransformer升级请求,并侦听返回的Web套接字上的数据. 例如,这是一个微型服务器,用于侦听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."));

客户端使用connect()方法和使用Web套接字协议的URI连接到WebSocket. 客户端可以使用add()方法写入WebSocket. 例如,

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

检出websocket_sample应用程序,该应用程序使用WebSockets与服务器进行通信.

Socket and 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类对异步套接字IO进行较低级别的访问.

Standard output, error, and input streams

该库提供了标准输出,错误和输入流,分别名为" 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();

Classes

BytesBuilder
建立一个字节列表,允许在最后添加字节和字节列表. [...]
CompressionOptions
WebSocket中控制压缩的选项. [...]
ConnectionTask<S>
由客户端套接字类型S上的startConnect方法返回, ConnectionTask<S>允许取消尝试连接到主机的尝试.
ContentType
内容类型的表示形式. ContentType的实例是不可变的.
Cookie的表示形式. 对于服务器作为Cookie标头值接收的Cookie,将仅设置名称属性. 在服务器中为" set-cookie"标头构建cookie时,以及在客户端以" set-cookie"标头接收cookie时,可以使用所有字段.
Datagram
数据报包. 发送到数据报套接字和从数据报套接字接收的数据包含数据的目标地址或源获取者的Internet地址和端口.
DetachedSocket
当由于HTTP连接升级而从HttpServerHttpClient分离套接字时,可能已经从套接字读取了未解析的数据. 此未解析的数据与分离的套接字一起在此类的实例中返回.
Directory
对文件系统上目录(或文件夹 )的引用. [...]
File
A reference to a file on the file system. [...]
FileLock
请求文件锁定时的锁定类型.
FileMode
可以打开文件的模式.
FileStat
FileStat对象表示在文件系统对象上调用POSIX stat()函数的结果. 它是一个不变的对象,表示stat()调用返回的快照值.
FileSystemCreateEvent
新创建的文件系统对象的文件系统事件.
FileSystemDeleteEvent
用于删除文件系统对象的文件系统事件.
FileSystemEntity
FileDirectoryLink对象的公共超类. [...]
FileSystemEntityType
文件系统上实体的类型,例如文件,目录或链接. [...]
FileSystemEvent
FileSystemEntity.watch发出的基本事件类.
FileSystemModifyEvent
文件系统事件,用于修改文件系统对象.
FileSystemMoveEvent
用于移动文件系统对象的文件系统事件.
GZipCodec
GZipCodec将原始字节编码为GZip压缩字节,然后将GZip压缩字节解码为原始字节. [...]
HeaderValue
标头值的表示形式: [...]
HttpClient
使用HTTP协议从服务器接收内容(例如网页)的客户端. [...]
HttpClientBasicCredentials
表示用于基本身份验证的凭据.
HttpClientCredentials
HttpClientDigestCredentials
表示摘要身份验证的凭据. 仅使用MD5算法且保护质量(qop)为"无"或"认证"的服务器才支持摘要认证.
HttpClientRequest
客户端连接的HTTP请求. [...]
HttpClientResponse
客户端连接的HTTP响应. [...]
HttpConnectionInfo
有关HttpRequestHttpResponseHttpClientRequestHttpClientResponse连接的信息.
HttpConnectionsInfo
有关HttpServer当前套接字连接的摘要统计信息.
HttpDate
实用程序功能,用于使用HTTP特定日期格式的日期.
HttpHeaders
HTTP请求和响应的标头. [...]
HttpOverrides
此类有助于通过模拟实现覆盖HttpClient . 客户端代码中的另一个类应使用构造模拟实现的重写对其进行扩展. 此基类中的实现默认为实际的HttpClient实现. 例如: [...]
HttpRequest
服务器端对象,包含HTTP请求的内容和有关HTTP请求的信息. [...]
HttpResponse
HTTP响应,响应于HTTP请求,该响应将报头和数据从服务器返回到客户端. [...]
HttpServer
使用HTTP协议传送内容(例如网页)的服务器. [...]
HttpSession
HttpStatus
HTTP状态代码. 以dart:io和dart:html导出.
InternetAddress
互联网地址或Unix域地址. [...]
InternetAddressType
InternetAddressType是该类型的网际地址 . 当前,支持IP版本4(IPv4),IP版本6(IPv6)和Unix域地址. Unix域套接字仅在Linux,MacOS和Android上可用.
IOOverrides
此类有助于通过模拟实现覆盖dart:io的各种API. [...]
IOSink
字节和文本的组合输出. [...]
链接对象是对文件系统链接的引用.
NetworkInterface
NetworkInterface表示当前系统上的活动网络接口. 它包含绑定到接口的InternetAddress列表.
OSError
OSError对象保存有关来自操作系统的错误的信息.
Platform
有关当前程序运行环境的信息. [...]
Process
执行程序的手段. [...]
ProcessInfo
ProcessInfo提供了用于检索有关当前过程的信息的方法.
ProcessResult
ProcessResult表示运行以Process.runProcess.runSync开始的非交互式过程的结果.
ProcessSignal
在Posix系统上, ProcessSignal用于向子进程发送特定的信号,请参见Process.kill . [...]
ProcessStartMode
用于运行新进程的模式.
RandomAccessFile
RandomAccessFile提供对文件中数据的随机访问. [...]
RawDatagramSocket
RawDatagramSocket是UDP套接字的无缓冲接口. [...]
RawSecureServerSocket
RawSecureServerSocket是服务器套接字,提供低级RawSecureSocket的流. [...]
RawSecureSocket
RawSecureSocket提供安全的(SSL或TLS)网络连接. 通过调用RawSecureSocket.connect提供与服务器的客户端连接. 使用RawSecureServerSocket创建的安全服务器还返回代表安全连接服务器端的RawSecureSocket对象. 使用SecurityContext对象中设置的受信任证书检查服务器提供的证书. 默认的SecurityContext对象包含一组内置的受信任的根证书,用于知名证书颁发机构.
RawServerSocket
RawServerSocket表示侦听套接字,并提供低级RawSocket对象的流,每个与侦听套接字建立的连接都一个. [...]
RawSocket
RawSocket是TCP套接字的无缓冲接口. [...]
RawSocketEvent
RawSocket的事件.
RawSocketOption
所述RawSocketOption被用作参数,以Socket.setRawOptionRawSocket.setRawOptionRawDatagramSocket.setRawOption定制底层套接字的行为. [...]
RawSynchronousSocket
用于通过TCP套接字同步通信的低级类. [...]
RawZLibFilter
RawZLibFilter类为zlib提供了一个低级接口.
RedirectInfo
Redirect information.
SecureServerSocket
SecureServerSocket是服务器套接字,提供高级Socket的流. [...]
SecureSocket
使用TLS和SSL通过TCP套接字安全通信的高级类. SecureSocket同时公开StreamIOSink接口,使其非常适合与其他Stream一起使用.
SecurityContext
该对象包含建立安全客户端连接时要信任的证书以及要从安全服务器提供服务的证书链和私钥. [...]
ServerSocket
ServerSocket代表侦听套接字,并提供Socket对象流,每个与侦听套接字建立的连接都一个. [...]
Socket
通过TCP套接字进行通信的高级类. [...]
SocketDirection
SocketDirection用作Socket.closeRawSocket.close的参数以沿指定方向关闭套接字.
SocketOption
所述SocketOption被用作参数,以Socket.setOptionRawSocket.setOption到集定制底层套接字的行为.
Stdin
Stdin允许从标准输入流进行同步和异步读取. [...]
StdioType
标准IO流附加到的对象的类型.
Stdout
标准输出代表IOSink对于任何stdoutstderr . [...]
SystemEncoding
系统编码是Windows上的当前代码页以及Linux和Mac上的UTF-8.
WebSocket
用于客户端或服务器应用程序的双向HTTP通信对象. [...]
WebSocketStatus
关闭WebSocket连接时使用的WebSocket状态代码.
WebSocketTransformer
WebSocketTransformer提供了将HttpRequest升级到WebSocket连接的功能. 它支持升级单个HttpRequest和升级HttpRequest流. [...]
X509Certificate
X509Certificate表示一个SSL证书,具有访问器以获取证书的字段.
ZLibCodec
ZLibCodec将原始字节编码为ZLib压缩字节,然后将ZLib压缩字节解码为原始字节.
ZLibDecoder
The ZLibDecoder is used by ZLibCodec and GZipCodec to decompress data.
ZLibEncoder
ZLibCodecGZipCodec使用ZLibEncoder编码器来压缩数据.
ZLibOption
公开输入参数的ZLib选项. [...]

Constants

APPEND → const FileMode
用于打开文件以对其进行读写的模式. 如果文件不存在,则创建该文件.
@ 不推荐使用 ("改为使用FileMode.append")
FileMode.append
GZIP → const GZipCodec
@ 不推荐使用 ("改用gzip")
gzip
gzip → const GZipCodec
GZipCodec的默认实现的实例 .
const GZipCodec._default()
READ → const FileMode
仅用于读取而打开文件的模式.
@ 不推荐使用 ("改用FileMode.read")
FileMode.read
SYSTEM_ENCODING → const SystemEncoding
@ 不推荐使用 ("改用systemEncoding")
const SystemEncoding()
systemEncoding → const SystemEncoding
当前的系统编码. [...]
const SystemEncoding ()
WRITE → const FileMode
打开文件进行读写的模式. 如果该文件已经存在,则将其覆盖. 如果文件不存在,则创建该文件.
@ 不推荐使用 ("改用FileMode.write")
FileMode.write
WRITE_ONLY → const FileMode
打开用于写文件的模式. 如果该文件已经存在,则将其覆盖. 如果文件不存在,则创建该文件.
@ 不推荐使用 ("改为使用FileMode.writeOnly")
FileMode.writeOnly
WRITE_ONLY_APPEND → const FileMode
打开文件以写入文件末尾的模式. 如果文件不存在,则创建该文件.
@ 不推荐使用 ("改用FileMode.writeOnlyAppend")
FileMode.writeOnlyAppend
ZLIB → const ZLibCodec
@ 不推荐使用 ("改用zlib")
zlib
zlib → const ZLibCodec
ZLibCodec的默认实现的实例 .
const ZLibCodec._default()

Properties

exitCode int
获取Dart VM的全局退出代码. [...]
读/写
pid int
返回当前进程的PID.
只读
stderr Stdout
该程序编写的标准错误输出流. [...]
只读
stdin Stdin
该程序读取的标准输入数据流.
只读
stdout Stdout
该程序编写的标准输出数据流. [...]
只读

Functions

exit(int code) → void
使用给定的退出代码立即退出Dart VM进程. [...]
sleep(Duration duration) → void
睡眠时间为duration中指定的duration . [...]
stdioType(dynamic object) StdioType
对于流,返回是否将其附加到文件,管道,终端或其他内容.

Enums

HttpClientResponseCompressionState
枚举,指定HttpClientResponse的字节流的压缩状态. [...]

Typedefs

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

Exceptions / Errors

CertificateException
查找或验证证书时,在建立安全网络连接的握手阶段发生的异常.
FileSystemException
Exception thrown when a file operation fails.
HandshakeException
建立安全网络连接的握手阶段中发生的异常.
HttpException
IOException
所有与IO相关的异常的基类.
ProcessException
RedirectException
SignalException
SocketException
StdinException
StdoutException
TlsException
TLS / SSL协议故障导致的安全网络异常.
WebSocketException