flutter 如何实现文件读写(使用篇)
flutter文件读写可以对磁盘文件进行操作,实现某些业务场景,那么我们开始来讲下这个文件读写操作。
使用的库插件(package)
dart:io(用于数据处理)
path_provider (用于获取路劲)
操作步骤
1.获取正确的本地路径
2.创建指向文件位置的引用
3.写入数据到文件内
4.从文件读取数据
1.获取正确的本地路径
我们获取路劲用的是这个插件
path_provider
可以看到里面提供了两个获取路劲的方式
Example
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
getTemporaryDirectory:【临时文件夹】
也就是系统可以随时清空的临时缓存文件夹,在IOS中对应NSTemporaryDirectory在安卓中对应getCacheDir()
我们来将信息储存在临时文件夹中,首先我们创建一个Storage类里面开始写
class Storage {
Future<String> get _localPath async {
final _path = await getTemporaryDirectory();
return _path.path;
}
}
2.创建指向文件位置的引用
确定文件储存位置之后,导入我们的io库,使用包里面的File类做泛型,然后获取路劲并且指向我们的文件名
Future<File> get _localFile async {
final path = await _localPath;
return File('$path/counter.txt');
}
3.写入数据到文件内
现在有了可以使用的File,直接就可以来读写数据了,因为我们使用了计数器,所以只需将证书储存为字符串格式,
使用“$counter”即可(解析成整数方法在下一步)
Future<File> writeCounter(counter) async {
final file = await _localFile;
return file.writeAsString('$counter');
}
4.从文件读取数据
现在可以直接用file类来读取文件数据,然后用int的自带解析方法来解析我们读取的String
Future<int> readCounter() async {
try {
final file = await _localFile;
var contents = await file.readAsString();
return int.parse(contents);
} catch (e) {
return 0;
}
}
完整代码
import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
class Storage {
Future<String> get _localPath async {
final _path = await getTemporaryDirectory();
return _path.path;
}
Future<File> get _localFile async {
final path = await _localPath;
return File('$path/counter.txt');
}
Future<int> readCounter() async {
try {
final file = await _localFile;
var contents = await file.readAsString();
return int.parse(contents);
} catch (e) {
return 0;
}
}
Future<File> writeCounter(counter) async {
final file = await _localFile;
return file.writeAsString('$counter');
}
}
class OnePage extends StatefulWidget {
final Storage storage;
OnePage({this.storage});
@override
_OnePageState createState() => _OnePageState();
}
class _OnePageState extends State<OnePage> {
int _counter;
@override
void initState() {
super.initState();
widget.storage.readCounter().then((value) {
setState(() => _counter = value);
});
}
Future<File> _incrementCounter() async {
setState(() => _counter++);
return widget.storage.writeCounter(_counter);
}
Future<File> _incrementCounterj() async {
setState(() => _counter--);
return widget.storage.writeCounter(_counter);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(
'$_counter',
style: Theme.of(context).textTheme.display1,
),
),
floatingActionButton: Row(
children: <Widget>[
FloatingActionButton(
onPressed: () => _incrementCounter(),
child: new Icon(Icons.add),
),
FloatingActionButton(
onPressed: () => _incrementCounterj(),
child: new Icon(Icons.title),
)
],
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
);
}
}
原文来自 ===> Flutter教程网:http://www.flutterj.com/
flutter 如何实现文件读写(使用篇)的更多相关文章
- 第二篇:python基础之文件读写
python基础之文件读写 python基础之文件读写 本节内容 os模块中文件以及目录的一些方法 文件的操作 目录的操作 1.os模块中文件以及目录的一些方法 python操作文件以及目录可以使 ...
- loadrunder脚本篇——文件读写操作
函数说明 函数原型: size_t fwrite( const void *buffer, size_t size, size_t count, FILE *file_pointer ); 参数说明 ...
- Python基础(十六):文件读写,靠这一篇就够了!
文件读写的流程 类比windows中手动操作txt文档,说明python中如何操作txt文件? 什么是文件的内存对象(文件句柄)? 演示怎么读取文件 ① 演示如下 f = open(r"D: ...
- Python之文件读写
本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...
- (转)linux文件读写的流程
转自http://hi.baidu.com/_kouu/item/4e9db87580328244ef1e53d0 在<linux内核虚拟文件系统浅析>这篇文章中,我们看到文件是如何被打开 ...
- Linux高级编程--05.文件读写
缓冲I/O和非缓冲I/O 文件读写主要牵涉到了如下五个操作:打开.关闭.读.写.定位.在Linux系统中,提供了两套API, 一套是C标准API:fopen.fclose.fread.fwrite.f ...
- f2fs源码分析之文件读写过程
本篇包括三个部分:1)f2fs 文件表示方法: 2)NAT详细介绍:3)f2fs文件读写过程:4) 下面详细阐述f2fs读写的过程. 管理数据位置关键的数据结构是node,node包括三种:inode ...
- 通过文件读写方式实现Matlab和Modelsim的联合仿真
虽然Modelsim的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是Matlab的强项,不但有大量的关于数字信号处 ...
- 文件读写IO
摘要:本文主要总结了以下有关文件读写的IO,系统调用与库函数. 1.初级IO函数:close,creat,lseek,open,write 文件描述符是一个整型数 1.1close 1.2int cr ...
随机推荐
- DRP-ThreadLocal简单的理解
简单就是jar一类套餐包.在一个简单的事情是一个工具类!该工具可以做?该工具被用来写多线程程序,行.多线程是有效的.你只能去网上找资料,由于今天我们仅仅来介绍ThreadLocal的知识. 我们来 ...
- 线程操纵UI问题
WPF只允许UI线程修改UI,其他线程必须通过Invoke.委托(安全性)Winform可以开启/关闭“只允许UI线程修改UI” 在WPF中非UI线程修改UI的方法 非UI线程直接修改UI,会报错 S ...
- JS 中click和onclick的区别
1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 2.click本身是方法,作用是触发onclick事件,只要执行了元素的click()方法,就会触发onclick事件
- Win8Metro(C#)数字图像处理--2.9图像均值滤波
原文:Win8Metro(C#)数字图像处理--2.9图像均值滤波 [函数名称] 图像均值滤波函数MeanFilterProcess(WriteableBitmap src) [函数代码] ...
- LINQ查询表达式---------into
LINQ查询表达式---------into into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 class Program { pu ...
- SQLite的使用(包括编译安装的步骤)
SQLite官网http://www.sqlite.org/ SQLite简介 SQLite是一款轻型的数据库,是遵守ACID(原子性.一致性.隔离性和持久性)的关系式数据库管理系统.SQLite实现 ...
- Cookie概述与应用
一.概述 Cookie是Web服务器保存在客户端的一系列文本信息 典型应用一:判断注册用户是否已经登录网站. 典型应用二:"购物车"的处理. Cookie的作用: 对特定对 ...
- C#中比较两个对象的地址是否相同(也是引用计数的问题,和Java一样)
private void button1_Click(object sender, EventArgs e) { char[] ch = { 'z', 's', 'w', 'a', 'n', ...
- 设置Windows服务的访问权限
作者:beyond 默认情况下,只有管理员组成员.LocalSystem和Power Users组成员帐户才有权启动.停止服务.为了让普通用户也可以控制该服务,我们可以手动设置其访问权限.可能有些初学 ...
- 沙漏集合 good
曾经的高考状元,如今都过得怎么样呢?http://www.toutiao.com/a6428794132465975554/ 你可知道,古代女人为什么不能当官——笑昏我了http://tieba.ba ...