Flutter保存文件到本地

  • Post author:
  • Post category:其他




一、概述

遇到需求是将配置保存到本地,除了数据存储shared_preferences外最合适的就是创建一个文件来保存数据,这样不用担心数据丢失。



二、准备

首先需要添加

path_provider

这个第三方插件库,这个插件是用来获取目录的,该插件为我们提供了多种获取不同类型目录的方法。



1.添加依赖

在pubspec.yaml文件下添加

dependencies:
  path_provider: ^2.0.2

使用的时候添加引用即可

import 'package:path_provider/path_provider.dart';



2.方法介绍


  • getTemporaryDirectory()

    :获取临时文件路径(IOS和安卓通用)

  • getApplicationSupportDirectory()

    :获取应用支持目录(IOS和安卓通用)

  • getApplicationDocumentsDirectory()

    :获取应用文件目录(IOS和安卓通用),针对 Android 设备的 AppDate 目录,iOS 设备的 NSDocumentDirectory 目录

  • getLibraryDirectory()

    :获取应用持久存储目录路径(仅IOS可用)

  • getExternalStorageDirectory()

    : 获取存储卡目录(仅安卓可用)

  • getExternalCacheDirectories()

    :获取外部缓存目录(仅安卓可用)

  • getDownloadsDirectory()

    :获取下载目录(仅桌面可用)



三、对应方法

保存文件除了上述的目录插件对应的方法,还需要io数据编写方法的配合。正常思路是:1.获取文件目录;2.获取文件,无则创建;3.保存内容到文件中。下面展示具体代码。

/// 获取文档目录
Future<String> _localfilePath() async{
    Directory tempDir = await getTemporaryDirectory();
    return tempDir.path;
}
/// 获取文档
Future<File> _localfile() async{
    String path = await _localfilePath();
    print('$path/settting.txt');
    return new File('$path/settting.txt');
}
/// 保存内容到文本
void _saveFile(String val) async{
    try{
        File file = await _localfile();
        IOSink sink = file.openWrite(mode: FileMode.append);
        sink.write(val);
        sink.close();
    }
    catch(e){
        // 写入错误
        ToastUtil.print(e);
    }
}

上面的方法中目录用的是

getTemporaryDirectory()

临时目录,这个是随着软件的删除而消失的,测试发现没有root的手机是没法找到的,跟window中的AppData文件夹类似,默认隐藏。



版权声明:本文为m0_52390420原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。