且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Dart的文件、目录和链接(2)

更新时间:2022-09-16 21:26:49

创建文件

import 'dart:io';

main(List<String> arguments) {
  var systemTempDir = Directory.systemTemp;
  //在系统临时目录下创建两个目录一个文件
  new File('${systemTempDir.path}/dir/subdir/file.txt').create(recursive: true)
    .then((file) {
      print(file.path);
    });
}

执行后看看系统临时目录下是否有创建好的目录和文件

Dart的文件、目录和链接(2)

以字符串读取文件

import 'dart:io';

main(List<String> arguments) {
  new File('F:/file.txt').readAsString().then((String contents) {
    print(contents);
  });
}

查看读取到的文件内容是否正确

Dart的文件、目录和链接(2)

以列表读取文件

import 'dart:io';

main(List<String> arguments) {
  new File('F:/file.txt').readAsLines().then((List<String> lines) {
    lines.forEach((line) {
      print(line);
    });
  });
}

效果如下

Dart的文件、目录和链接(2)

以字节读取文件

import 'dart:io';
import 'package:crypto/crypto.dart';

main(List<String> arguments) {
  new File('F:/file.txt').readAsBytes().then((bytes) {
    String base64 = CryptoUtils.bytesToBase64(bytes);
    print(base64);
  });
}

效果如下,需要的crypto包下载地址http://pan.baidu.com/s/1dDARcrB

Dart的文件、目录和链接(2)

以流读取文件

import 'dart:io';
import 'dart:convert';
import 'dart:async';

main(List<String> arguments) {
  final file = new File('F:/file.txt');
  //把文件转换成流
  Stream<List<int>> inputStream = file.openRead();
  inputStream
    //解码为UTF8
    .transform(UTF8.decoder)
    //流转换为列表
    .transform(new LineSplitter())
    //设置输出
    .listen((String line) {
      print('$line有${line.length}个字节');
    },
    onDone: () { print('文件已关闭'); },
    //出错时输出错误信息
    onError: (e) { print(e.toString()); });
}

效果如下

Dart的文件、目录和链接(2)

读取文件的错误处理

import 'dart:io';

void handleError(e) {
  print('有一个${e.runtimeType}错误');
  print(e.message);
}

main(List<String> arguments) {
  final filename = 'non_existent_file.txt';
  //读取并输出文件内容
  new File(filename).readAsString()
    .then(print)
    //捕捉错误
    .catchError(handleError);
    /*
    //下面的代码已经提取到handleError方法中
    .catchError((e) {
      print('有一个${e.runtimeType}错误');
      print('无法读取$filename');
    });
    */
}

读取文件出错后,按我们自定义的效果输出提示

Dart的文件、目录和链接(2)

将字符串写入文件

import 'dart:io';

main(List<String> arguments) {
  final filename = 'F:/file.txt';
  new File(filename).writeAsString('some content')
    .then((File file) {
      file.readAsString().then(print);
    });
}

效果如下

Dart的文件、目录和链接(2)

将字节写入文件

import 'dart:io';
import 'dart:convert';

main(List<String> arguments) {
  final string = 'Dart!';
  //编码为UTF8
  var encodedData = UTF8.encode(string);
  new File('F:/file.txt')
    //把字节写入文件
    .writeAsBytes(encodedData)
    //读取并输出文件内容
    .then((file) => file.readAsBytes())
    .then((data) {
      print(UTF8.decode(data));
    });
}

效果如下

Dart的文件、目录和链接(2)

将流写入文件

import 'dart:io';

main(List<String> arguments) {
  var file = new File('F:/file.txt');
  //创建一个新的IOSink
  var sink = file.openWrite();
  //将对象转成字符串,并写入文件
  sink.write('FILE ACCESSED ${new DateTime.now()}\n');
  //关闭IOSink释放系统资源
  sink.close();
}

效果如下

Dart的文件、目录和链接(2)