文件系统上的文件引用。
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.
}
您也可以使用流向文件写入。使用 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之外,exists、lastModified、stat等方法也是异步的。
其他资源
- 实现类型
构造函数
- 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
-
resolveSymbolicLinks(
) → Future< String> - 解析相对于当前工作目录的文件系统对象的路径。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