简单了解 Dart File 类的用法

简介: 这是我参与8月更文挑战的第 5 天,活动详情查看:8月更文挑战。为应掘金的八月更文挑战,你知道的越多,意味着不知道的越多> 本文主要简单了解 Dart File 类的用法。

Dart File 类

File 表示文件系统中某个文件的引用。

File 实例是个对象,它持有 path 并对其进行操作。可以使用 parent getter 获取父目录,parent 属性继承自 FileSystemEntity

使用 pathname 创建新的 File 对象来访问文件系统上的文件。

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

File 类包含操作文件及其内容的方法。使用这些方法,可以打开和关闭文件,读写文件,创建和删除文件,以及检查文件是否存在。

读写文件时,可以使用 stream (通过 openRead),随机访问操作 (通过 open),或者类似 readAsString 这样的便捷方法。

File 类中的方法大部分都有同步和异步两种形式,比如 readAsStringreadAsStringSync。除非有特别的理由,通常应当使用异步方法以避免阻塞程序。

如果构造 File 对象的 path 是一个符号链接,而非文件,则 File 类的方法会操作链接指向的最终目标文件。不过,deletedeleteSync 方法除外,这两个方法是对符号链接进行操作。

读文件

下面示例代码使用异步的 readAsString 方法读取文件,它将整个文件内容视为一个字符串:

import 'dart:async';
import 'dart:io';
void main() {
  new File('file.txt').readAsString().then((String contents) {
    print(contents);
  });
}

更灵活更有用的方法是使用 Stream 方式读文件。调用 openRead 方法打开文件,该方法返回 stream,这个 stream 以字节块的方式返回文件数据。可以监听 stream 来获取数据并进行必要的处理。可以继续使用不同的 transformer 操作数据来得到想要的数据格式。

可以使用 stream 方式来读取大文件,并提供 transformer 来操作数据。

import 'dart:io';
import 'dart:convert';
import 'dart:async';
main() {
  final file = new File('file.txt');
  Stream<List<int>> inputStream = file.openRead();
  inputStream
    .transform(utf8.decoder)       // Decode bytes to UTF-8.
    .transform(new LineSplitter()) // Convert stream to individual lines.
    .listen((String line) {        // Process results.
        print('$line: ${line.length} bytes');
      },
      onDone: () { print('File is now closed.'); },
      onError: (e) { print(e.toString()); });
}

写文件

使用 writeAsString 方法写文件。

import 'dart:io';
void main() {
  final filename = 'file.txt';
  new File(filename).writeAsString('some content')
    .then((File file) {
      // Do something with the file.
    });
}

也可以使用 Stream 来写入文件。调用 openWrite 方法打开文件,返回结果是 IOSink,可以向 IOSink 写入数据。记得操作完成后调用 IOSink.close 关闭 sink。

import 'dart:io';
void main() {
  var file = new File('file.txt');
  var sink = file.openWrite();
  sink.write('FILE ACCESSED ${new DateTime.now()}\n');
  // Close the IOSink to free system resources.
  sink.close();
}

使用 Future

为避免意外阻塞程序,File 类的一些方法使用 Future 作为返回值。比如,length 方法用于获取文件长度,返回的是 Future。调用 then 方法注册回调函数,获取到文件长度后会回调这个函数。

import 'dart:io';
main() {
  final file = new File('file.txt');
  file.length().then((len) {
    print(len);
  });
}

除了 length() 外,其他几个方法也返回 Future,包括:existslastModifiedstat 等等。

其他资源

  • Dart by Example provides additional task-oriented code samples that show how to use various API from the Directory class and the related File class.
  • II/O for Command-Line Apps a section from A Tour of the Dart Libraries covers files and directories.
  • Write Command-Line Apps, a tutorial about writing command-line apps, includes information about files and directories.



相关文章
|
弹性计算 运维 监控
GPU实例使用--vGPU驱动自动安装和升级
为了适配最新的渲染软件,以及驱动稳定性的提升,vGPU实例的驱动需要定期进行升级,因为使用vgpu的客户多数为渲染和云游戏等业务场景,对vGPU驱动的快速升级和批量自动化要求比较高。
GPU实例使用--vGPU驱动自动安装和升级
|
5月前
|
设计模式 Linux 开发工具
Docker部署会吗?
本段内容主要介绍了Docker常用命令、Linux基础指令及日志查看方法,还涉及SpringMVC的执行流程、设计模式与注解,适合用于面试中技术能力的展示。
159 0
|
8月前
|
人工智能 IDE 开发工具
寻找Cursor的替代品:10款AI编程工具深度评测与推荐·优雅草卓伊凡
寻找Cursor的替代品:10款AI编程工具深度评测与推荐·优雅草卓伊凡
5880 18
寻找Cursor的替代品:10款AI编程工具深度评测与推荐·优雅草卓伊凡
|
7月前
|
iOS开发
ios虚拟摄像头插件,iPhone苹果替换相机软件,通过xposed框架实现
本项目包含三部分内容:1) 通过MobileSubstrate Hook系统相机进程,替换原始视频流数据的核心代码;2) 基于SwiftUI设计的多功能摄像头界面,支持摄像头切换、滤镜选择和视频源配置;3) 使用PHPickerViewController实现本地视频选择、时长滑块控制及视频裁剪导出功能。适用于学习iOS底层Hook技术与现代UI开发结合的应用场景。下载地址:https://www.pan38.com/share.php?code=BCjmZ,提取码:8888(仅供学习参考)。
|
存储 安全 数据安全/隐私保护
深入探索iOS与Android的隐私保护机制
在数字化时代,智能手机已成为我们生活中不可或缺的一部分,而随之而来的隐私安全问题也日益凸显。本文旨在对比分析iOS和Android两大操作系统在隐私保护方面的策略和技术实现,揭示它们在设计理念、权限管理、数据加密等方面的不同之处,为读者提供一个全面了解两大系统隐私保护机制的视角。
|
9月前
|
Java
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
本文深入解析了ConcurrentHashMap的实现原理,涵盖JDK 7与JDK 8的区别、静态代码块、构造方法、put/get/remove核心方法等。JDK 8通过Node数组+链表/红黑树结构优化并发性能,采用CAS和synchronized实现高效锁机制。文章还详细讲解了hash计算、表初始化、扩容协助及计数更新等关键环节,帮助读者全面掌握ConcurrentHashMap的工作机制。
228 6
【源码】【Java并发】【ConcurrentHashMap】适合中学体质的ConcurrentHashMap
|
Android开发 Windows
mac下Android Studio 快捷键(持续更新)
mac下Android Studio 快捷键(持续更新)
802 1
|
负载均衡 监控 安全
Wi-Fi漫游深入解析:确保设备连接的有效策略
Wi-Fi漫游深入解析:确保设备连接的有效策略
1616 9
|
Android开发
Android ConstraintLayout按比例缩放View
Android ConstraintLayout按比例缩放View 关键点有两个,第一,使用Android ConstraintLayout的layout_constraintDimensionRatio属性,设置宽高比缩放比例,宽:高。
3000 0
|
存储 数据采集 数据处理
Python filter函数
Python filter函数
Python filter函数