文件系统上文件的一个引用。
File
包含可以在其上执行操作的路径。你可以使用 parent(从 FileSystemEntity 继承的属性)获取文件的父目录。
使用路径名创建一个新的 File
对象,以便从你的程序中访问文件系统上的指定文件。
var myFile = File('file.txt');
File
类包含用于操作文件及其内容的各种方法。使用该类中的方法,你可以打开和关闭文件,从中读取和写入,创建和删除文件,并检查它们是否存在。
在读取或写入文件时,你可以使用流(使用 openRead),随机访问操作(使用 open),或者如 readAsString 这样方便的方法
该类中的大多数方法都存在同步和异步对的版本,例如,readAsString 和 readAsStringSync。除非你有特殊原因需要使用方法的同步版本,否则请优先选择异步版本以避免阻塞你的程序。
如果路径是链接
如果 path 是符号链接而非文件,那么 File
的方法将作用于链接的最终目标,除了 delete 和 deleteSync 方法,它们作用于链接本身。
从文件读取
以下代码示例使用异步的 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);
}
除了长度之外,exists,lastModified,stat 和其他方法也是异步的。
其他资源
- 实现类型
构造函数
- File(String path)
- 创建一个 File 对象。工厂
- File.fromRawPath(Uint8List rawPath)
- 从原始路径创建一个 File 对象。工厂
- File.fromUri(Uri uri)
- 从 URI 创建一个 File 对象。工厂
属性
方法
-
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 - 同步重命名此文件。重写
-
resolveSymbolicLinks(
) → Future< String> - 解析相对于当前工作目录的文件系统对象的路径。继承
-
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 - 等号运算符。继承