Flutter使用path_provider插件读取与写入文件,path_provider插件提供了一种平台无关的方法来访问设备文件系统上常用的位置。该类目前支持访问两个文件系统位置:

  • 临时目录:系统可以随时清除的临时目录(缓存),在iOS上,对应NSTemporaryDirectory()返回的值,在Android上,这是getCacheDir()返回的值。

  • 文档目录:应用程序的目录,用于存储只有它可以访问的文件,仅当删除应用程序时,系统才会清除目录,在iOS上,这对应NSDocumentsDirectory,在Android上,这是AppData目录。

首先我们需要修改一下pubspec.yaml文件,添加path_provider插件,再在pubspec.yaml顶部的动作功能区中点击“Packages Get”。

dependencies:flutter:sdk: flutterpath_provider: ^0.2.1+1

当你的Flutter应用程序有一个文件位置的引用,你可以使用dart:io API对文件系统执行读/写操作。

下面的示例会在点击按钮时保存按钮按下的次数,并在应用程序重新启动时加载按钮按下的次数:

import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
class ReadAndWriteDemo extends StatefulWidget {@override_ReadAndWriteDemoState createState() => new _ReadAndWriteDemoState();
}
class _ReadAndWriteDemoState extends State<ReadAndWriteDemo> {// 全局变量,存储点击数int _counter;// 覆盖initState函数,创建状态对象调用该方法@overridevoid initState() {// 调用原initState方法内容super.initState();/** 调用_readCounter函数,读取点击数*  将点击数作为参数,创建一个函数*/_readCounter().then((int value){// 通知框架此对象的内部状态已更改setState((){// 将参数赋予存储点击数的变量_counter = value;});});}/** _readCounter函数,读取点击数* 关键字async表示异步操作* 返回值Future类型,表示延迟处理的对象*/Future<int> _readCounter() async {try {/** 获取本地文件目录* 关键字await表示等待操作完成*/File file = await _getLocalFile();// 使用给定的编码将整个文件内容读取为字符串String  contents = await file.readAsString();// 返回文件中的点击数return int.parse(contents);} on FileSystemException {// 发生异常时返回默认值return 0;}}// _getLocalFile函数,获取本地文件目录Future<File> _getLocalFile() async {// 获取本地文档目录String dir = (await getApplicationDocumentsDirectory()).path;// 返回本地文件目录return new File('$dir/counter.txt');}// _incrementCounter函数,点击增加按钮时的回调Future<Null> _incrementCounter() async {setState((){// 存储点击数的变量自加1_counter++;});// 将存储点击数的变量作为字符串写入文件await (await _getLocalFile()).writeAsString('$_counter');}@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text('读写文件操作')),body: new Center(child: new Text('点击按钮${_counter==0?'':'$_counter次'}!')),floatingActionButton: new FloatingActionButton(onPressed: _incrementCounter,tooltip: '增加',child: new Icon(Icons.add),));}
}
void main() {runApp(new MaterialApp(title: 'Flutter',home: new ReadAndWriteDemo(),));
}

Flutter进阶—读取与写入文件相关推荐

  1. sublime python3中读取和写入文件时如何解决编码问题

    sublime python3中读取和写入文件时如何解决编码问题 参考文章: (1)sublime python3中读取和写入文件时如何解决编码问题 (2)https://www.cnblogs.co ...

  2. java写入文件编码格式为ansi_Java读取、写入文件如何解决乱码问题

    读取文件流时,经常会遇到乱码的现象,造成乱码的原因当然不可能是一个,这里主要介绍因为文件编码格式而导致的乱码的问题.首先,明确一点,文本文件与二进制文件的概念与差异. 文本文件是基于字符编码的文件,常 ...

  3. 读取和写入文件的最简单方法

    本文翻译自:Easiest way to read from and write to files There are a lot of different ways to read and writ ...

  4. nodejs:fs (内置模块)读取和写入文件

    node fs (内置模块)读取和写入文件 const fs = require("fs"); //异步读取文件 fs.readFile("data.txt", ...

  5. go语言逐行读取和写入文件

    前言 前面一篇博客讲到nodejs使用readline逐行读取和写入文件 今天使用go语言实现从输入文件中读取每行数据,然后将每行字段组合成SQL插入脚本,然后逐行写入另外一个空白文件中. tb_pa ...

  6. HttpWebRequest FileStream分块读取和写入文件WebClient

    //HttpWebRequest  下载文件 private void DownloadFile(string filePath)           {               string[] ...

  7. python读取写入文件_Python读取和写入文件

    1 从文件中读取数据 1.1 读取整个文件 创建名为test的txt文本文件,添加内容如下所示: 1234567890 2345678901 3456789012 实现代码: with open('t ...

  8. python在读写文件之前需要创建文件对象-python读取或写入文件

    一.创建并读取文本文件 1.该方法需要关闭filereader对象 #!/usr/bin/env python3#读取文件 input_file = "F://python入门//文件//一 ...

  9. C#中File类的常用读取与写入文件方法的使用

    场景 File 命名空间: System.IO 方法 AppendAllLines(String, IEnumerable<String>)  向一个文件中追加行,然后关闭该文件. 如果指 ...

最新文章

  1. 在Ubuntu 16.04.5 LTS上安装pygame模块
  2. mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis
  3. webstorm 设置uglify 压缩js文件
  4. golang 判断 数组 切片 是否为空
  5. Python3 websocket server与client
  6. centos7开启,关闭防火墙
  7. 【Python】青少年蓝桥杯_每日一题_6.11_打印星号
  8. 入门 Kotlin 和 Java 混合开发
  9. Leetcode--72.编辑距离(java)
  10. 无人机目标定位C++程序
  11. JS 点击复制Copy
  12. Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
  13. 开发基于GUI的R包(1)
  14. TCP长连接和短连接-深入浅出(还在总说http长连接吗)
  15. C#程序设计基础试题(一)
  16. MEMS传感器的下一轮技术变革
  17. 2020年专业408的算法题
  18. Vuejs---《Vue.js + Node.js-构建音乐播放器新玩法-video》
  19. 个税不省,何以暴富?程序员汇算清缴注意事项和要点
  20. 波束成形学习-1(Introduction)

热门文章

  1. pytorch学习笔记(二十八):循环神经网络的从零开始实现
  2. Ubuntu——“系统无法检测到Intel的核心显卡”的调试笔记~
  3. Java中文编码转换与字节长度判断
  4. Altium AD20中铺铜被导线分割的解决方法,如何正确覆铜整片区域
  5. esp8266 esp12 AT指令连接wifi热点联网,HTTP获取OneNET物联网平台消息,控制四路远程开关
  6. LeetCode 647. 回文子串 (动态规划)
  7. 敏捷开发绩效管理之五:敏捷开发生产率(上)(故事点估算)
  8. ActiveMq生产者流量控制(Producer Flow Control)
  9. javascript之BOM对象总结
  10. 判断字符串只能有且只有一处连续数字不同