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());  // 先注释 不然会截断文件
                                    flutter文件读写可以对磁盘文件进行操作,实现某些业务场景,那么我们开始来讲下这个文件读写操作。使用的库插件(package)dart:io(用于数据处理)path_provider(用于获取路劲)操作步骤
1.获取正确的本地路径
2.创建指向文件位置的引用
3.写入数据到文件内
4.从文件读取数据1.获取正确的本地路径
我们获取路劲用的是这个插件path_provider
可以看到里面提供了两个获取路劲的方式
Example
Directory tempDir = await getT...
                                    我有一个组件接受一个:itemname并输出一个包含图像的html包。每个包的图像都不同。
以下是我所拥有的:
import React, { Component } from 'react';
import { NavLink } from 'react-router-dom';
import SVGInline from "react-svg-inline";
export default (props) => (
  <NavLink className="hex" activeCla
                                    在配置 settings.gradle 之前先来简单回顾一下关于 Gradle 的一些基础知识。
如果你了解过 Gradle 相关的配置的话,一定会看到一个概念,就是 约定优于配置 ,什么意思呢,按照面向对象的思路来理解,每一个工程是一个巨大的 Project 类,整个类里有很多的属性。而我们创建的每一个项目其实就是一个具体的 Project 对象(也就是实例).约定优于配置的意思,就是在 project 实例化的时候,其内部的属性已经有了默认值。那么我们怎么知道有哪些默认值呢?在项目根目录执行
./gra
main(List<String> arguments) {
  new Directory('dir/subdir').create(recursive: true)
    .then((Directory directory) {
      print(directo...
1. 文件操作
无论是Flutter还是DartVM下的脚本(系统路径不同,Dart VM运行在PC或服务器操作系统下,Flutter运行在移动操作系统下)都通过Dart IO库来操作文件。
在实际开发,如果存储一些简单的数据,推荐使用s.