添加包
在 Flutter 中进行文件读写需要添加 dart:io 和 path_provider 这两个包
获取路径
在 Flutter 中,同样也是存在着两个目录:
- 一个是缓存目录,在 Android 上对应的
getCacheDir()
的返回值,在 iOS 上对应NSCachesDirectory
的返回值。该目录可以随时被删除。 - 一个是只能应用本身访问的目录,在 iOS 上,这个目录对应于
NSDocumentDirectory
。在 Android 上,则是AppData
目录。该目录只有在 APP 被删除时才会被清空。
那么如何获取这两个路径呢?
缓存目录
getExternalCacheDirectories()
方法可以获取到缓存目录,它的返回值是一个 Future<List<Directory>>
应用目录
getApplicationDocumentsDirectory()
方法可以获取到应用目录,它的返回值是一个 Future<Directory>
写入文件
写入文件需要 dart:io
库的 File
类来实现:
///应用目录写入
Future<String> writeFile() async {
var directory = await getApplicationDocumentsDirectory();
var path = directory.path;
File file = File("$path/test.txt");
file.writeAsString("这是要插入的字符串");
return "插入成功";
}
///缓存目录写入
Future<String> writeFile() async {
var cache = await getExternalCacheDirectories();
var cachePath = cache[0].path;
File file = File("$cachePath/cache.txt");
file.writeAsString("这是要插入的字符串");
return "插入成功";
}
读取文件
同样需要 dart:io
库的 File
类来实现:
///读取缓存目录
Future<String> readFile() async {
final directory= await getApplicationDocumentsDirectory();
var cache = await getExternalCacheDirectories();
String cachePath = cache[0].path;
File file = File("$cachePath/cache.txt");
return file.readAsString();
}
///读取应用目录
Future<String> readFile() async {
final directory = await getApplicationDocumentsDirectory();
String path = directory.path;
File file = File("$path/test.txt");
return file.readAsString();
}
删除文件
调用 File 的 delete
方法,不赘述。