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

创建文件

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

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

这里写图片描述

以字符串读取文件

import 'dart:io';

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

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

这里写图片描述

以列表读取文件

import 'dart:io';

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

效果如下

这里写图片描述

以字节读取文件

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

这里写图片描述

以流读取文件

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

效果如下

这里写图片描述

读取文件的错误处理

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');
    });
    */
}

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

这里写图片描述

将字符串写入文件

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

效果如下

这里写图片描述

将字节写入文件

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

效果如下

这里写图片描述

将流写入文件

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

效果如下

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值