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

效果如下

这里写图片描述

目录
相关文章
「译文」如何在 Ansible 中复制多个文件和目录
「译文」如何在 Ansible 中复制多个文件和目录
|
1月前
|
开发框架 前端开发 算法
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
【Qt App 编译 】Qt Cmake 资源文件的加载:如何使用 CMakeLists.txt 文件和资源文件
28 0
|
6月前
|
C#
.net core 删除指定路径下的所有文件以及文件夹(文件夹建议保留目录)
1、服务层 ```csharp /// <summary> /// 删除指定路径下的所有文件 /// </summary> /// <param name="filepath">指定路径</param> /// <returns></returns> public string DeleteSpecifiedPathAllFile(string filepath) { try { DirectoryInfo info = new DirectoryInfo(filepath); // 去除文件夹的只读属性 info.Attribu
28 0
|
10月前
|
机器学习/深度学习 传感器 运维
完整代码目录
完整代码目录
691 0
|
C#
如何在 C# 项目中链接一个文件夹下的所有文件
在 C# 项目中通过链接方式引入文件可以让我们在项目中使用这些文件中的代码。常见的比如链接 AssemblyInfo.cs 文件,这样我们就可以在项目中使用这个文件中的版本号等信息。但是如果我们想要链接一个文件夹下的所有文件,该怎么做呢?今天我们就来看看如何在 C# 项目中链接一个文件夹下的所有文件。
102 0
如何在 C# 项目中链接一个文件夹下的所有文件
编译编译时,用不到的库,一定不要链接
编译编译时,用不到的库,一定不要链接
90 0
|
JavaScript Windows
XRename(文件文件夹超级重命名工具)简介
XRename(文件文件夹超级重命名工具)简介
148 0
XRename(文件文件夹超级重命名工具)简介
python 如何实现删除指定文件夹下的指定后缀名文件
python 如何实现删除指定文件夹下的指定后缀名文件
|
Python
Python编程:pycharm同级目录导入模块报错问题
Python编程:pycharm同级目录导入模块报错问题
169 0