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 ...
随机推荐
- Qt5官方demo分析集10——Qt Quick Particles Examples - Emitters
此系列的所有文章都可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 前段时间去听了Qt在北京的开发人员大会,感觉QML ...
- react学习(6)——关于组件生命周期的问题
在项目开发的过程中,遇到了一个问题: 父组件请求后台数据,收到后将数据以props传给子组件,子组件根据收到数据的不同,显示不同的内容,同时,子组件自身可以根据click操作改变根据父组件的数据显示的 ...
- POJ - 2991 Crane (段树+计算几何)
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
- 毕业设计之感悟 —— UML 与 ER 图
今天毕业设计答辩,虽然我第一个上场,但是不是特别紧张,因为整个系统都是我写的.我以为自己天衣无缝,能应付所有老师的所有问题.事实上,我被老师教育了一番. 老师说我,毕业论文中没有一个类.我一开始比较懵 ...
- WPF应用无法使用Snoop分析的解决办法
如果WPF程序是以管理员身份启动的,Snoop不是用管理员身份启动,那就不行. 用管理员身份启动snoop,就可以了. 管理员身份启动cmd,然后启动snoop,ok.
- Win10《芒果TV》商店版2016-2017春节大礼,每日前100名用户免费领取7天VIP
告别2016,喜迎2017,鸡年大吉,春节期间,每天登录Win10<芒果TV>商店版的前100位用户可领取一张芒果TV会员7天体验卡,先到先得. 芒果TV会员权益: 1.全站免广告 2.自 ...
- 零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异
原文:零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异 本次要针对Disabled以及Hidden作 ...
- C#通过HttpListener实现HTTP监听
代码: using NLog; using System; using System.Diagnostics; using System.IO; using System.Net; using Sys ...
- qt技巧--使用html导出表格替代excel
曾经为qt不能直接导出excel而困扰,后来经过深入了解,得知qt支持xml国际语言,html是xml的一种.html是做网页的,相信大家比较熟悉.所以使用html的<table ...
- Delphi 10.2的 更新说明,所有官方资料:新特征和Bugfix列表,所有工具开发说明
TMS东京版控件更新情况http://www.tmssoftware.com/site/radstudio10_2tokyo.asp RAD Studio 10.2 更新说明http://blog.q ...