Dart File 类的用法
  CpwfxCg9mmk0 2023年12月15日 19 0


本文主要简单了解 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 类中的方法大部分都有同步和异步两种形式,比如 readAsString 和 readAsStringSync。除非有特别的理由,通常应当使用异步方法以避免阻塞程序。

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

读文件

下面示例代码使用异步的 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,包括:exists,lastModified,stat 等等。

最后

这里也为想要学习Flutter的朋友们准备了两份学习资料《Flutter Dart语言编程入门到精通》《Flutter实战》,从编程语言到项目实战,一条龙服务!!

《Flutter Dart 语言编程入门到精通》

  • 第一章 Dart语言基础
  • 第二章 Dart 异步编程
  • Dart File 类的用法_java

  • 第三章 异步之 Stream 详解
  • 第四章 Dart标准输入输出流
  • Dart File 类的用法_java_02

  • 第五章 Dart 网络编程
  • 第六章 Flutter 爬虫与服务端
  • Dart File 类的用法_flutter_03

  • 第七章 Dart 的服务端开发
  • 第八章 Dart 调用C语言混合编程
  • 第九章 LuaDardo中Dart与Lua的相互调用
  • Dart File 类的用法_flutter_04

《Flutter实战:第二版》

  • 第一章:起步
  • 第二章:第一个Flutter应用
  • 第三章:基础组件
  • 第四章:布局类组件
  • 第五章:容器类组件

Dart File 类的用法_java_05

  • 第六章:可滚动组件
  • 第七章:功能型组件
  • 第八章:事件处理与通知
  • 第九章:动画
  • 第十章:自定义组件
  • Dart File 类的用法_android_06

  • 第十一章:文件操作与网络请求
  • 第十二章:Flutter扩展
  • 第十三章:国际化
  • 第十四章:Flutter核心原理
  • 第十五章:一个完整的Flutter应用
  • Dart File 类的用法_面试_07

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月15日 0

暂无评论

推荐阅读
  myvzaUIeeaqf   3天前   12   0   0 Java
  ijEHlwWobBkw   7天前   15   0   0 Java
  DKE3T9FhmJBk   7天前   14   0   0 Java
  T3It887JLZgD   8天前   15   0   0 Java
  2xk0JyO908yA   7天前   21   0   0 Java
CpwfxCg9mmk0
最新推荐 更多

2024-05-05