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);
  }
}