File抽象 接口

文件系统上的文件引用。

File 对象包含可以执行操作的 路径。您可以使用 parent 属性(从 FileSystemEntity 继承而来)获取文件的父目录。

使用文件路径创建一个新的 File 对象,以便从您的程序中访问文件系统上的指定文件。

var myFile = File('file.txt');

File 类包含用于操作文件及其内容的多种方法。使用此类中的方法,您可以打开和关闭文件,从它们中读取和写入,创建和删除它们,并检查它们的存在。

在读取或写入文件时,您可以使用流(通过 openRead),随机访问操作(通过 open),或方便的方法,例如 readAsString

此类中的大多数方法都存在同步和异步的配对,例如,readAsStringreadAsStringSync。除非您有使用方法同步版本的特定原因,否则请优先使用异步版本,以避免阻塞您的程序。

如果 path 是符号链接而不是文件,那么 File 的方法将操作链接的最终目标,除了 deletedeleteSync,它们将操作链接。

从文件中读取

以下代码示例使用异步的 readAsString 方法读取文件的全部内容作为字符串。

import 'dart:async';
import 'dart:io';

void main() {
  File('file.txt').readAsString().then((String contents) {
    print(contents);
  });
}

读取文件的一种更灵活和有用的方法是使用 Stream。使用 openRead 打开文件,它返回一个提供文件数据的流,以字节数据块的形式。在文件内容可用时读取流以处理文件内容。您可以使用各种转换器连续操作文件内容以将其转换为所需格式,或为其输出做准备。

您可能想使用流来读取大型文件,使用转换器操作数据,或与另一个 API(如 WebSocket)兼容。

import 'dart:io';
import 'dart:convert';
import 'dart:async';

void main() async {
  final file = File('file.txt');
  Stream<String> lines = file.openRead()
    .transform(utf8.decoder)       // Decode bytes to UTF-8.
    .transform(LineSplitter());    // Convert stream to individual lines.
  try {
    await for (var line in lines) {
      print('$line: ${line.length} characters');
    }
    print('File is now closed.');
  } catch (e) {
    print('Error: $e');
  }
}

向文件写入

要向文件写入字符串,请使用 writeAsString 方法

import 'dart:io';

void main() async {
  final filename = 'file.txt';
  var file = await File(filename).writeAsString('some content');
  // Do something with the file.
}

您也可以使用流向文件写入。使用 openWrite 打开文件,它返回一个 IOSink,您可以将数据写入其中。确保使用 IOSink.close 方法关闭接收器。

import 'dart:io';

void main() async {
  var file = File('file.txt');
  var sink = file.openWrite();
  sink.write('FILE ACCESSED ${DateTime.now()}\n');
  await sink.flush();

  // Close the IOSink to free system resources.
  await sink.close();
}

异步方法的使用

为了避免程序意外阻塞,一些方法是异步的,并返回一个Future。例如,获取文件长度的length方法返回一个Future。等待Future准备好时获取结果。

import 'dart:io';

void main() async {
  final file = File('file.txt');

  var length = await file.length();
  print(length);
}

除了length之外,existslastModifiedstat等方法也是异步的。

其他资源

实现类型

构造函数

File(String path)
创建一个File对象。
factory
File.fromRawPath(Uint8List rawPath)
从原始路径创建一个File对象。
factory
File.fromUri(Uri uri)
从URI创建一个File对象。
factory

属性

absolute File
具有path的绝对路径的File
no setteroverride
hashCode int
此对象的哈希码。
no setterinherited
isAbsolute bool
此对象的路径是否为绝对路径。
no setterinherited
parent Directory
此实体的父目录。
no setterinherited
path String
获取文件的路径。
no setteroverride
runtimeType Type
对象运行时类型的表示。
no setterinherited
uri Uri
表示文件系统实体位置的Uri
no setterinherited

方法

copy(String newPath) Future<File>
复制此文件。
copySync(String newPath) File
同步复制此文件。
create({bool recursive = false, bool exclusive = false}) Future<File>
创建文件。
createSync({bool recursive = false, bool exclusive = false}) → void
同步创建文件。
delete({bool recursive = false}) Future<FileSystemEntity>
删除此文件
override
deleteSync({bool recursive = false}) → void
同步删除此文件
override
exists() Future<bool>
检查具有此路径的文件系统实体是否存在。
inherited
existsSync() bool
同步检查具有此路径的文件系统实体是否存在。
inherited
lastAccessed() Future<DateTime>
文件的最后访问时间。
lastAccessedSync() DateTime
文件的最后访问时间。
lastModified() Future<DateTime>
获取文件的最后修改时间。
lastModifiedSync() DateTime
获取文件的最后修改时间。
length() Future<int>
文件的长度。
lengthSync() int
同步提供的文件长度。
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的函数或属性时触发。
inherited
open({FileMode mode = FileMode.read}) Future<RandomAccessFile>
打开文件以进行随机访问操作。
openRead([int? start, int? end]) Stream<List<int>>
创建一个新的独立的Stream,用于此文件的正文内容。
openSync({FileMode mode = FileMode.read}) RandomAccessFile
同步打开文件以进行随机访问操作。
openWrite({FileMode mode = FileMode.write, Encoding encoding = utf8}) IOSink
创建一个新的独立的IOSink用于文件。
readAsBytes() Future<Uint8List>
以字节列表的形式读取整个文件内容。
readAsBytesSync() Uint8List
以字节列表的形式同步读取整个文件内容。
readAsLines({Encoding encoding = utf8}) Future<List<String>>
使用指定的Encoding以文本行读取整个文件内容。
readAsLinesSync({Encoding encoding = utf8}) List<String>
使用指定的Encoding同步以文本行读取整个文件内容。
readAsString({Encoding encoding = utf8}) Future<String>
使用给定的编码读取整个文件内容作为字符串。
readAsStringSync({Encoding encoding = utf8}) String
使用给定的编码同步读取整个文件内容作为字符串。
rename(String newPath) Future<File>
重命名此文件。
override
renameSync(String newPath) File
同步重命名此文件。
override
解析相对于当前工作目录的文件系统对象的路径。
inherited
resolveSymbolicLinksSync() String
解析相对于当前工作目录的文件系统对象的路径。
inherited
setLastAccessed(DateTime time) Future
修改文件最后访问时间。
setLastAccessedSync(DateTime time) → void
同步修改文件最后访问时间。
setLastModified(DateTime time) Future
修改文件最后修改时间。
setLastModifiedSync(DateTime time) → void
同步修改文件最后修改时间。
stat() Future<FileStat>
路径上调用操作系统的 stat() 函数。
inherited
statSync() FileStat
同步在路径上调用操作系统的 stat() 函数。
inherited
toString() String
此对象的字符串表示形式。
inherited
watch({int events = FileSystemEvent.all, bool recursive = false}) Stream<FileSystemEvent>
开始监视 FileSystemEntity 的变化。
inherited
writeAsBytes(List<int> bytes, {FileMode mode = FileMode.write, bool flush = false}) Future<File>
将字节数组写入文件。
writeAsBytesSync(List<int> bytes, {FileMode mode = FileMode.write, bool flush = false}) → void
同步将字节数组写入文件。
writeAsString(String contents, {FileMode mode = FileMode.write, Encoding encoding = utf8, bool flush = false}) Future<File>
将字符串写入文件。
writeAsStringSync(String contents, {FileMode mode = FileMode.write, Encoding encoding = utf8, bool flush = false}) → void
同步将字符串写入文件。

运算符

operator ==(Object other) bool
等号运算符。
inherited