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

效果如下

这里写图片描述

目录
相关文章
|
5月前
|
JavaScript Android开发
AutoJs4.1.0实战教程---js文件打包发布成APK文件
AutoJs4.1.0实战教程---js文件打包发布成APK文件
890 0
AutoJs4.1.0实战教程---js文件打包发布成APK文件
「译文」如何在 Ansible 中复制多个文件和目录
「译文」如何在 Ansible 中复制多个文件和目录
|
5月前
|
JavaScript 前端开发 容器
如何使用Contentlayer和Tocbot创建博客网站目录?
如何使用Contentlayer和Tocbot创建博客网站目录?
72 0
|
C#
如何在 C# 项目中链接一个文件夹下的所有文件
在 C# 项目中通过链接方式引入文件可以让我们在项目中使用这些文件中的代码。常见的比如链接 AssemblyInfo.cs 文件,这样我们就可以在项目中使用这个文件中的版本号等信息。但是如果我们想要链接一个文件夹下的所有文件,该怎么做呢?今天我们就来看看如何在 C# 项目中链接一个文件夹下的所有文件。
123 0
如何在 C# 项目中链接一个文件夹下的所有文件
dirent--文件以及文件夹相关操作(跨平台)
dirent--文件以及文件夹相关操作(跨平台)
|
Java
使用代码把一个目录打包成jar
使用代码把一个目录打包成jar
139 0
下载xerces.jar链接
下载xerces.jar链接
81 0
编译编译时,用不到的库,一定不要链接
编译编译时,用不到的库,一定不要链接
103 0