当前位置:   article > 正文

Flutter开发之数据存储-2-文件存储(33)_path_provider和dart:io

path_provider和dart:io

数据存储部分在移动开发中是非常重要的部分,无论是一些轻量级的数据(如用户信息、APP配置信息等)还是把需要长期存储的数据写入本地文件或者Sqlite3。都离不开数据存储,上一篇SharedPreferences的使用,今天就练习一下文件存储-写入本地文件。

文件存储

这三种存储方式Flutter本身都没有内置,不过好在官方提供了第三方库,操作文件同样我们也需要像SharedPreferences一样,需要在pubspec.yaml引入。在 Flutter 里实现文件读写,需要使用 path_providerdart 的 io 模块。path_provider 负责查找 iOS/Android 的目录文件,IO 模块负责对文件进行读写。

官方文档:https://pub.dev/packages/path_provider#-installing-tab-

# 文件存储依赖库
path_provider: ^1.1.2
  • 1
  • 2

然后命令行执行flutter packages get 完成后如下:
在这里插入图片描述

数据存取示例

测试的地方导入

import 'package:path_provider/path_provider.dart';
import 'dart:io';
  • 1
  • 2

整个操作演示逻辑跟SharedPreferences一样,关于文件存储的三个获取文件路径的方法我这里说明一下。

path_provider中有三个获取文件路径的方法:

getTemporaryDirectory()//获取应用缓存目录,等同IOS的NSTemporaryDirectory()和Android的getCacheDir() 方法
getApplicationDocumentsDirectory()获取应用文件目录类似于Ios的NSDocumentDirectory和Android上的 AppData目录
getExternalStorageDirectory()//这个是存储卡,仅仅在Android平台可以使用
  • 1
  • 2
  • 3
来看下操作文件的效果图:

在这里插入图片描述

借用了SharedPreferences存储的逻辑,只是把存储的代码放在了file.text中,代码里有详尽的注释,我就不多做解释说明了,读者可自行尝试对比跟SharedPreferences的差别

样例代码
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';

class FileSaveTest extends StatefulWidget {
  FileSaveTest({Key key, this.title}) : super(key: key);
  final String title;
  @override
  createState() => new _FileSaveTestState();
}

class _FileSaveTestState extends State<FileSaveTest> {
  var _textFieldController = new TextEditingController();
  var _storageString = '';
  final STORAGE_KEY_FILE = 'storage_key';

  /**
   * 利用文件存储数据
   */
  saveString() async {
    final file = await getFile('file.text');
    //写入字符串
    file.writeAsString(_textFieldController.value.text.toString());
  }

  /**
   * 获取存在文件中的数据
   */
  Future getString() async {
    final file = await getFile('file.text');
    var filePath  = file.path;
    setState(() {
      file.readAsString().then((String value) {
        _storageString = value +'\n文件存储路径:'+filePath;
      });
    });
  }

  /**
   * 初始化文件路径
   */
  Future<File> getFile(String fileName) async {
    //获取应用文件目录类似于Ios的NSDocumentDirectory和Android上的 AppData目录
    final fileDirectory = await getApplicationDocumentsDirectory();

    //获取存储路径
    final filePath = fileDirectory.path;

    //或者file对象(操作文件记得导入import 'dart:io')
    return new File(filePath + "/"+fileName);
  }


  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('文件存储'),
      ),

      body: new Column(
        children: <Widget>[
          SizedBox(height: 5,),
          Text("文件存储", textAlign: TextAlign.center,style: TextStyle(fontSize: 24,color: Colors.deepOrange),),

          Container(
            padding: EdgeInsets.all(10),
            height: 58,
            child: TextField(
              controller: _textFieldController,
              style: TextStyle(fontSize: 28),
            ),
          ),


          MaterialButton(
            onPressed: saveString,
            child: new Text("存储",style: TextStyle(color: Colors.white,fontSize: 22),),
            color: Colors.lightBlueAccent,
          ),
          MaterialButton(
            onPressed: getString,
            child: new Text("获取",style: TextStyle(color: Colors.white,fontSize: 22),),
            color: Colors.lightGreen,
          ),

          SizedBox(height: 15,),
          Container(
            padding: EdgeInsets.all(8),
            height: 180,
            child: Text('存储的值为:$_storageString',style: TextStyle(fontSize: 22,color: Colors.deepOrange)
            ),
          ),

        ],
      ),

    );
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
部分摘自

[Flutter入门进阶之旅(十二)Flutter 数据存储](https://blog.csdn.net/xieluoxixi/article/details/8665501

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/308689
推荐阅读
相关标签
  

闽ICP备14008679号