Flutter保存文件到本地

百科知识2025-04-273

一、概述

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

二、准备

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

1.添加依赖

  在文件下添加

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 _localfilePath() async{
Directory tempDir = await getTemporaryDirectory();
return tempDir.path;
}
/// 获取文档
Future _localfile() async{
String path = await _localfilePath();
print('$path/');
return new File('$path/');
}
/// 保存内容到文本
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文件夹类似,默认隐藏。