一、介绍
文件是存储在磁盘上的数据的集合,可以包含任何类型的数据,如文本、图片、音频等。文件是计算机中用于数据存储的基本单位,它可以包含各种类型的数据,如程序代码、文本文档、图片、音频和视频等。
在 Dart 中,我们可以使用 dart:io 库中的 File 类来操作文件
二、文件(File)
以下是一个简单的示例,演示如何使用 File 类来创建一个新文件,并向其中写入一些文本
void demo1() async {
var file = File('test.txt');
try {
await file.writeAsString('Hello, Dart!');
} catch (e) {
print('Error: $e');
}
}
2.1 创建文件
使用 create 方法可以创建一个新的文件。如果文件已经存在,create 方法不会有任何效果。如果你希望覆盖已经存在的文件,可以给 create 方法传入一个名为 recursive 的参数,将其设为 true。
void demo2() async {
var file = File('test.txt');
try {
await file.create(recursive: true);
} catch (e) {
print('Error: $e');
}
}
2.2 读取文件
使用 readAsString 方法可以读取文件的内容,返回一个字符串。如果文件不存在,readAsString 方法会抛出一个异常
void demo3() async {
var file = File('test.txt');
try{
String contents = await file.readAsString();
print(contents);
}catch(e){
print('文件不存在: $e');
}
}
2.3 写入文件
使用 writeAsString 方法可以向文件中写入字符串。如果文件不存在,writeAsString 方法会创建一个新的文件。如果文件已经存在,writeAsString 方法会覆盖文件的内容。
void demo4() async {
var file = File('test.txt');
File? fileCached;
try {
fileCached = await file.writeAsString('Hello, Dart!');
} catch (e) {
print(e);
}
print('fileCached: $fileCached');
}
2.4 删除文件
使用 delete 方法可以删除一个文件。如果文件不存在,delete 方法不会有任何效果。
void demo5() async {
var file = File('test.txt');
try {
await file.delete();
} catch (e) {
print(e);
}
}
2.5 权限
如果我们没有权限写入 ‘/root/test.txt’ 文件,writeAsString 方法会抛出一个 FileSystemException 异常,然后我们在 catch 语句中捕获这个异常,并打印一个错误消息
void demo6() async {
var file = File('/root/test.txt');
try {
await file.writeAsString('Hello, Dart!');
} catch (e) {
print('Error: $e');
}
}
三、目录 (Directory)
3.1 创建目录
使用 create 方法可以创建一个新的目录。如果目录已经存在,create 方法不会有任何效果。如果你希望创建的目录的父目录不存在,可以给 create 方法传入一个名为 recursive 的参数,将其设为 true
void dir1() async {
var directory = Directory('test');
await directory.create();
}
1
2
3
4
3.2 目录列表
使用list方法可以列出目录的内容,包括文件和子目录。list 方法返回一个 Stream 对象,我们可以使用 await for 语句来遍历这个 Stream
void dir2() async {
var directory = Directory('test');
await for (var entity in directory.list()) {
print(entity.path);
}
}
1
2
3
4
5
6
3.3 删除目录
使用 delete 方法可以删除一个目录。如果目录不存在,delete 方法不会有任何效果。如果你希望删除的目录包含文件或子目录,可以给 delete 方法传入一个名为 recursive 的参数,将其设为true
void dir3() async {
var directory = Directory('test');
await directory.delete();
}