经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
flutter 如何实现文件读写(使用篇)
来源:cnblogs  作者:王橙艺  时间:2019/7/11 8:38:02  对本文有异议

flutter文件读写可以对磁盘文件进行操作,实现某些业务场景,那么我们开始来讲下这个文件读写操作。


使用的库插件(package)
dart:io(用于数据处理)
path_provider (用于获取路劲)

操作步骤
1.获取正确的本地路径
2.创建指向文件位置的引用
3.写入数据到文件内
4.从文件读取数据

1.获取正确的本地路径 
我们获取路劲用的是这个插件
path_provider 
可以看到里面提供了两个获取路劲的方式

Example

  1. Directory tempDir = await getTemporaryDirectory();
  2. String tempPath = tempDir.path;
  3. Directory appDocDir = await getApplicationDocumentsDirectory();
  4. String appDocPath = appDocDir.path;

getTemporaryDirectory:【临时文件夹
也就是系统可以随时清空的临时缓存文件夹,在IOS中对应NSTemporaryDirectory在安卓中对应getCacheDir() 

我们来将信息储存在临时文件夹中,首先我们创建一个Storage类里面开始写

  1. class Storage {
  2. Future<String> get _localPath async {
  3. final _path = await getTemporaryDirectory();
  4. return _path.path;
  5. }
  6. }


2.创建指向文件位置的引用 
确定文件储存位置之后,导入我们的io库,使用包里面的File类做泛型,然后获取路劲并且指向我们的文件名

  1. Future<File> get _localFile async {
  2. final path = await _localPath;
  3. return File('$path/counter.txt');
  4. }


3.写入数据到文件内 
现在有了可以使用的File,直接就可以来读写数据了,因为我们使用了计数器,所以只需将证书储存为字符串格式,
使用“$counter”即可(解析成整数方法在下一步)

  1. Future<File> writeCounter(counter) async {
  2. final file = await _localFile;
  3. return file.writeAsString('$counter');
  4. }


4.从文件读取数据
现在可以直接用file类来读取文件数据,然后用int的自带解析方法来解析我们读取的String

  1. Future<int> readCounter() async {
  2. try {
  3. final file = await _localFile;
  4. var contents = await file.readAsString();
  5. return int.parse(contents);
  6. } catch (e) {
  7. return 0;
  8. }
  9. }


完整代码

  1. import 'dart:io';
  2. import 'dart:async';
  3. import 'package:flutter/material.dart';
  4. import 'package:path_provider/path_provider.dart';
  5. class Storage {
  6. Future<String> get _localPath async {
  7. final _path = await getTemporaryDirectory();
  8. return _path.path;
  9. }
  10. Future<File> get _localFile async {
  11. final path = await _localPath;
  12. return File('$path/counter.txt');
  13. }
  14. Future<int> readCounter() async {
  15. try {
  16. final file = await _localFile;
  17. var contents = await file.readAsString();
  18. return int.parse(contents);
  19. } catch (e) {
  20. return 0;
  21. }
  22. }
  23. Future<File> writeCounter(counter) async {
  24. final file = await _localFile;
  25. return file.writeAsString('$counter');
  26. }
  27. }
  28. class OnePage extends StatefulWidget {
  29. final Storage storage;
  30. OnePage({this.storage});
  31. @override
  32. _OnePageState createState() => _OnePageState();
  33. }
  34. class _OnePageState extends State<OnePage> {
  35. int _counter;
  36. @override
  37. void initState() {
  38. super.initState();
  39. widget.storage.readCounter().then((value) {
  40. setState(() => _counter = value);
  41. });
  42. }
  43. Future<File> _incrementCounter() async {
  44. setState(() => _counter++);
  45. return widget.storage.writeCounter(_counter);
  46. }
  47. Future<File> _incrementCounterj() async {
  48. setState(() => _counter--);
  49. return widget.storage.writeCounter(_counter);
  50. }
  51. @override
  52. Widget build(BuildContext context) {
  53. return Scaffold(
  54. body: Center(
  55. child: Text(
  56. '$_counter',
  57. style: Theme.of(context).textTheme.display1,
  58. ),
  59. ),
  60. floatingActionButton: Row(
  61. children: <Widget>[
  62. FloatingActionButton(
  63. onPressed: () => _incrementCounter(),
  64. child: new Icon(Icons.add),
  65. ),
  66. FloatingActionButton(
  67. onPressed: () => _incrementCounterj(),
  68. child: new Icon(Icons.title),
  69. )
  70. ],
  71. ),
  72. floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
  73. );
  74. }
  75. }


原文来自  ===>  Flutter教程网:http://www.flutterj.com/

原文链接:http://www.cnblogs.com/ahyang/p/11163614.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号