当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart File用法及代码示例


dart:io 库中File 类的用法介绍如下。

对文件系统上文件的引用。

File 包含可以对其执行操作的path。您可以使用从 FileSystemEntity 继承的属性 parent 获取文件的父目录。

使用路径名创建一个新的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 s。

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 方法关闭水槽。

import 'dart:io';

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

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

异步方法的使用

为避免程序意外阻塞,有几个方法是异步的并返回 Future 。例如,获取文件长度的 length 方法返回 Future 。等待未来准备好后得到结果。

import 'dart:io';

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

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

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

其他资源

实现的类型

FileSystemEntity

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 File class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。