Dart核心库包含哪些功能?
摘要:Dart core library Dart IO class File & class Directory(两个均是继承自 abstract FileSystemEntity) FIle 仅仅用来操作真正的文件 D
Dart core library
Dart IO
class File & class Directory(两个均是继承自 abstract FileSystemEntity)
FIle
仅仅用来操作真正的文件
Directory
仅仅针对文件夹(即使按照规定Directory也是特殊文件)
File
FileRead
read file async
void main() async {
File fileByRead = File("write.txt");
if (!await fileByRead.exists()) {
fileByRead.createSync();
stderr.write("该文件不存在,已创建");
}
/// 使用流的方式读取
Stream<List<int>> inputStream = fileByRead.openRead();
/// 1. Stream<List<int>> 绑定到 utf8 解码器上面得到对应的 Stream<String>
/// 2. 将得到的 Stream<String> 通过 Stream 的方法 transform 在行分割器下面进行分割
/// 这样实现了边读边处理
Stream<String> lines =
(utf8.decoder.bind(inputStream)).transform(const LineSplitter());
var t1 = 0;
try {
await for (final _ in lines) {
print('t1 ${t1++}');
}
print('file is now closed');
} catch (e) {
print(e);
}
Stream<List<int>> inputStream2 = fileByRead.openRead();
var t2 = 0;
/// stream等的操作只要没有 async 和 await 关键字就是异步的
inputStream2.listen((data) { // 每次输入缓冲区满了就会被监听到
print('t2: ${t2++}');
});
print('${t1}, ${t2}');
}
FileWrite
void main() async {
File fileByWrite = File('write.txt');
if (await fileByWrite.exists() == false) {
await fileByWrite.create();
stderr.write('文件不存在,已经创建');
}
/// 表示的是覆盖写
IOSink ioSink = fileByWrite.openWrite(mode: FileMode.write);
ioSink.write('io_write');
/// ioSink.add(List<int> data) # 用来写二进制文件
await ioSink.flush();
await ioSink.close();
print('closed');
sleep(const Duration(seconds: 10));
return;
}
Directory
void main() async {
Directory directory = Directory('F:\\language');
if (directory.existsSync()) {
/// directory.list() // 返回一个 Stream<FileSystemEntity>
List<FileSystemEntity> fFileList = directory.listSync(recursive: true);
print(fFileList.length);
}
}
