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

简介: <div class="markdown_views"><h2 id="创建文件">创建文件</h2><pre class="prettyprint"><code class=" hljs lasso"><span class="hljs-keyword">import</span> <span class="hljs-string">'dart:io'</span>;

创建文件

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

效果如下

这里写图片描述

目录
相关文章
|
应用服务中间件 nginx
https网页加载http资源时不显示图片,报错解决方案
本文是博主学习网络知识的记录,希望对大家有所帮助。
5992 0
https网页加载http资源时不显示图片,报错解决方案
|
移动开发 算法 前端开发
|
安全 小程序 网络安全
Cisco-DHCP中继配置
Cisco-DHCP中继配置
526 4
|
人工智能 前端开发 Serverless
阿里云百炼应用实践系列-AI助手快速搭建
本文主要介绍如何基于阿里云百炼平台快速在10分钟为您的网站添加一个 AI 助手。我们基于阿里云百炼平台的能力,以官方帮助文档为参考,搭建了一个以便全天候(7x24)回应客户咨询的AI助手,介绍了相关技术方案和主要代码,供开发者参考。
2736 15
阿里云百炼应用实践系列-AI助手快速搭建
|
开发框架 前端开发 JavaScript
在Winform开发中,使用Async-Awati异步任务处理代替BackgroundWorker
在Winform开发中,使用Async-Awati异步任务处理代替BackgroundWorker
|
缓存 监控 Unix
性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
【2月更文挑战第9天】性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
819 5
性能监控之 Linux 命令 top、vmstat、iostat、free、iftop 基础
|
机器学习/深度学习 算法 PyTorch
PyTorch使用Tricks:学习率衰减 !!
PyTorch使用Tricks:学习率衰减 !!
751 1
|
编译器 C语言 芯片
51单片机介绍
1.1:单片机的种类 51系列单片机 :51单片机是对兼容英特尔8051指令系统的单片机的统称。51单片机广泛应用于家用电器、汽车、工业测控、通信设备中。因为51单片机的指令系统、内部结构相对简单,所以国内许多高校用其进行单片机入门教学。— 0.0嘻IXAuXUe3nG4! https://m.tb.cn/h.4HSC1TB?sm=f79b70 51单片机开发板实验板送视频教程带點阵STC89C52芯片学习板普中。买这个开发板,
1724 1
51单片机介绍
|
消息中间件 存储 微服务
20-微服务技术栈(高级):MQ死信队列&TTL&延迟队列
消息中间件,作为分布式系统中必不可少的一部分,在前面我们学习过其基本的消息发送、消费,但是读者朋友们肯定也知道,真正的生产环境可不是简单的发送消息这么简单。如何避免消息丢失?如何满足特殊场景下的消息延迟消费?如何解决消费能力不足?如何搭建集群?等等 本节笔者将从消息的可靠性出发,解决消息不丢失的问题。同时借助TTL实现延迟消息,惰性队列解决消息堆积问题,最后完成集群搭建以实现生产环境真正的高可用。
661 0
|
消息中间件 存储 供应链
NBF事件中心架构设计与实现
NBF是阿里巴巴供应链中台的基础技术团队打造的一个技术PaaS平台,她提供了微服务FaaS框架,低代码平台和中台基础设施等一系列的PaaS产品,旨在帮助业务伙伴快速复用和扩展中台能力,提升研发效能和对外的商业化输出。事件中心就是NBF系列技术产品中的一员。本文首先介绍事件驱动架构的概念及适用场景,然后会介绍事件中心产品的设计和实现。
NBF事件中心架构设计与实现