1. 目录(Directory)
1.1 导入
import 'dart:io'; // Directory所在的包
import 'dart:convert'; //
1.2 创建实例
// 根据路径字符串创建目录对象
Directory dir=new Directory("assets\\files");
// 根据Uri对象创建目录对象
// Directory dir=new Directory.fromUri(Uri(path: "assets"));
// 根据Uint8List路径创建实例 Utf8Encoder().convert()将字符串转换成Uint8List
// Directory.fromRawPath(Utf8Encoder().convert("assets\\files"));
1.3 属性
// String path 获取此目录的路径
print(dir.path);
// Uri 返回表示目录位置的uri
print(dir.uri);
// 父目录的Directory对象
print(dir.parent);
// absolute 返回一个绝对路径的Directory对象
print(dir.absolute);
// 判断是否是绝对路径
print(dir.isAbsolute);
1.4 方法
// create({bool recursive: false}) → Future<Directory> 根据路径创建目录 recursive是否递归创建 递归创建的意思就是 即便路径中有目录不存在 全部都会创建出来
await dir.create(recursive: true);
// createTemp([String prefix]) → Future<Directory> 在此目录中创建一个临时目录,其他随机字符将附加到prefix以产生唯一的目录名称.
await dir.createTemp();
// list({bool recursive: false, bool followLinks: true}) → Stream<FileSystemEntity>
// recursive是否递归列出子目录 followLinks是否允许link
await dir.list().toList().then((value) => print(value));
// rename(String newPath) → Future<Directory> 重命名目录
// resolveSymbolicLinks() → Future<String> 解析文件系统对象相对于当前工作目录的路径 解析路径上的所有符号链接,并解析所有..和. 路径段 返回一个类似绝对路径的字符串
await dir.absolute.resolveSymbolicLinks().then((value) => print(value));
// 查看目录是否存在
await dir.exists().then((value) => print(value));
// delete({bool recursive: false}) → Future<FileSystemEntity> 删除文件目录
// 默认情况下 只能删除空目录 将recursive设置为true 才可以递归删除目录中所有的文件和目录
await dir.delete(recursive: true).then((value) => print(value)).catchError((err)=>{print(err)});
// stat() → Future<FileStat> 查看目录信息
// type directory 类型:目录
// changed 2020-05-29 11:14:50.000 文件系统对象的数据或元数据的最后更改时间
// modified 2020-05-29 11:15:01.000 最后一次更改文件系统对象的数据的时间
// accessed 2020-05-29 11:15:01.000 上次访问文件系统对象的数据的时间
// mode rwxrwxrwx 文件系统对象的模式 r(read) w(write) x(execute) 读写执行
// size 0 文件大小
await dir.stat().then((value) => print(value));
2.文件(File)
2.1 导入
import 'dart:io';
import 'dart:convert';
2.2 创建实例
// 根据文件路径字符串创建文件实例
File file=new File("assets/index.txt");
// 根据Uri对象创建文件实例
File file2=new File.fromUri(Uri(path: "assets/index.txt"));
Utf8Codec utf=Utf8Codec();
// 根据Uint8List文件路径创建实例 Utf8Encoder().convert()将字符串转换成Uint8List
File file3=File.fromRawPath(Utf8Encoder().convert("assets\\files\\index.txt"));
2.3 方法
// 打印一下file实例对象
print(file); // File: 'assets\files\index.txt'
// 返回绝对路径的File实例
print(file.absolute); // File: 'C:\Users\Administrator.PW6NUH21X31RM79\Desktop\Dart\assets\files\index.txt'
// 获取文件路径
print(file.path); // assets\files\index.txt
// 是否是绝对路径
print(file.isAbsolute); // fasle
// 获取父目录的Directory对象
print(file.parent); // Directory: 'assets\files'
// 获取uri
print(file.uri); // assets/files/index.txt
2.4 方法
// 1. copy(String newPath) 复制文件 copySync(String newPath) 同步复制文件
// 新路径的目录必须存在 否则报错
// 若新路径下已有同名文件 则覆盖
await file.copy("assets/image/index.txt").then((value) => print(value));
// 2. create({bool recursive: false})创建文件
// createSync({bool recursive: false}) 同步创建文件
// 可选命名参数:recursive 默认false,
// 若为true 则路径中有目录不存在时 会递归创建目录
// 若为false 则路径中的目录不存在时 会报错
File file2=new File("assets/files/text.txt");
await file2.create();
// 3.lastAccessed() 获取文件上次访问时间 lastAccessedSync()同步获取
print(await file.lastAccessed()); // 2020-05-30 10:39:35.000
// setLastAccessed(Datetime time) 修改文件上次访问时间 +Sync 同步
await file.setLastAccessed(new DateTime.now());
// 4. lastModified() 获取文件最后修改时间 lastModifiedSync()同步获取
print(await file.lastModified());
// setLastModified(DateTime time) 修改文件的最后修改时间 +Sync 同步
await file.setLastModified(new DateTime.now());
// 5. length()获取文件长度(字节数) lengthSync() 同步获取
print(await file.length());
// 6. rename(String newPath) 重命名 renameSync(String newPath)
// 若新路径和旧路径在同一个目录下 那么仅仅是重命名
// 若新路径和旧路径不在一个目录下 那么就是移动文件加重命名
file.rename("index.txt");
// 7. 读取
// 7.1 readAsString()以字符串形式读取 readAsStringSync() 同步读取
print(await file.readAsString());
// 7.2 readAsBytes()以字节形式读取 readAsBytesSync() 同步读取
print(await file.readAsBytes());
// 7.3 readAsLines()按行读取 返回字符串数组 readAsLinesSync() 同步读取
print(await file.readAsLines());
// 8. 写入
// 8.1 writeAsString() 以字符串方式写入
file.writeAsString("Dart ",
mode: FileMode.append,// 写入的模式 append(追加写入) read(只读) write(读写) writeOnly(只写) writeOnlyAppend(只追加)
flush: true, // 如果flush设置为`true` 则写入的数据将在返回之前刷新到文件系统
encoding:utf8, // 设置编码
);
// 8.2 writeAsBytes() 写入字节数组 参数同上
file.writeAsBytes([1,2,3]);
// 9. delete() 删除文件 deleteSync() 同步删除文件
// await file.delete();
// 10. exists() 检查文件是否存在 existsSync() 同步检查文件是否存在
print(await file.exists());
// 11. resolveSymbolicLinks() 解析文件系统对象相对于当前工作目录的路径 +Sync同步
print(await file.resolveSymbolicLinks());
// 12. stat() 获取文件对应的FileStat对象 StatSync() 同步获取
// 包含type(类型)
// changed(文件系统对象的数据的最后修改时间)
// modified(最后一次更改文件系统对象的数据的时间)
// accessed(上次访问时间)
// size(文件大小)
print(await file.stat());
// 13和14涉及流(Stream)的操作 之后会继续更新异步和流
// 13. openRead() 为文件的内容创建一个Stream(流)
print(file.openRead());
// 14. openWrite() 为文件创建一个IOSink,使用结束需要释放资源
// print(file.openWrite()); // 先注释 不然会截断文件