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.
}

你还可以使用 Stream 向文件写入。使用 openWrite 打开文件,该方法返回一个 IOSink,你可以向其写入数据。务必用 IOSink.close 方法关闭 sink。

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();
}

异步方法的使用

为了避免程序的不 intentional 阻塞,多个方法都是异步的,并返回一个 Future。例如,length 方法,它返回文件的长度,返回一个 Future。等待 future,直到它准备好时获取结果。

import 'dart:io';

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

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

除了长度之外,existslastModifiedstat 和其他方法也是异步的。

其他资源

实现类型

构造函数

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

属性

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

方法

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>
删除此 File
重写
deleteSync({布尔值 recursive = false}) → 无
同步删除此 文件
重写
exists() Future<布尔值>
检查具有此路径的文件系统实体是否存在。
继承
existsSync() 布尔值
同步检查具有此路径的文件系统实体是否存在。
继承
lastAccessed() Future<DateTime>
文件的最后访问时间。
lastAccessedSync() DateTime
文件的最后访问时间。
lastModified() Future<DateTime>
获取文件的最后修改时间。
lastModifiedSync() DateTime
获取文件的最后修改时间。
length() Future<整数>
文件的长度。
lengthSync() 整数
同步获取文件的长度。
noSuchMethod(Invocation invocation) → 动态类型
在访问不存在的方法或属性时调用。
继承
open({FileMode mode = FileMode.read}) Future<RandomAccessFile>
打开文件进行随机访问操作。
openRead([整数? start, 整数? end]) Stream<List<整数>>
为该文件的 内容创建一个新的独立 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>>
使用给定的编码读取整个文件内容为文本行。
readAsLinesSync({Encoding encoding = utf8}) List<String>
使用给定的编码以同步方式读取整个文件内容为文本行。
readAsString({Encoding encoding = utf8}) Future<String>
使用给定的编码读取整个文件内容为字符串。
readAsStringSync({Encoding encoding = utf8}) String
使用给定的编码以同步方式读取整个文件内容为字符串。
rename(String newPath) Future<File>
重命名此文件。
重写
renameSync(String newPath) File
同步重命名此文件。
重写
解析相对于当前工作目录的文件系统对象的路径。
继承
resolveSymbolicLinksSync() String
解析相对于当前工作目录的文件系统对象的路径。
继承
setLastAccessed(DateTime time) Future
修改文件最后访问时间。
setLastAccessedSync(DateTime time) → void
同步修改文件最后访问时间。
setLastModified(DateTime time) Future
修改文件最后修改时间。
setLastModifiedSync(DateTime time) → void
同步修改文件最后修改时间。
stat() Future<FileStat>
在路径path上调用操作系统的stat()函数。
继承
statSync() FileStat
在路径path上同步调用操作系统的stat()函数。
继承
toString() String
该对象的字符串表示形式。
继承
watch({int events = FileSystemEvent.all, bool recursive = false}) Stream<FileSystemEvent>
开始监视FileSystemEntity的变化。
继承
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
等号运算符。
继承