Flutter外部文件操作
Flutter
Flutter文件存储操作
提供给程序一个路径信息。 使用插件path_provider
来获取Path
$>warning 环境
Flutter 1.22.0
Dart 2.10.0
文件
IOS文件存储
每个应用对应一个单独的文件系统。
- Documents
应用程序数据文件写入到这个目录下。这个目录用于存储用户数据。保存应用程序的重要数据文件和用户数据文件等。
- Library
- Caches
- Prefenerences
- Application Support
- tmp
存放临时文件,不会被备份
主要涉及的类
- Directory
- File
操作
final directory = await getApplicationDocumentsDirectory();
final path = directory.path;
获取临时文件路径
getTemporaryDirectory().then((value) => print(value));
>>> '/var/mobile/Containers/Data/Application/EAE0BE0B-9AE2-4A42-9693-295BD398BA73/Library/Caches'
获取应用支持目录
getApplicationSupportDirectory().then((value) => print(value));
>>> '/var/mobile/Containers/Data/Application/EAE0BE0B-9AE2-4A42-9693-295BD398BA73/Library/Application Support'
获取应用文件目录
getApplicationDocumentsDirectory().then((value) => print(value));
>>> '/var/mobile/Containers/Data/Application/EAE0BE0B-9AE2-4A42-9693-295BD398BA73/Documents'
获取应用持久存储目录
IOS
getLibraryDirectory().then((value) => print(value));
Android
getExternalStorageDirectory().then((value) => print(value));
// 获取外部存储目录列表
getExternalStorageDirectories().then((value) => print(value));
总结
Future<Directory> _tempDirectory;
Future<Directory> _appSupportDirectory;
Future<Directory> _appLibraryDirectory;
Future<Directory> _appDocumentsDirectory;
Future<Directory> _externalStorageDirectory;
Future<List<Directory>> _externalStorageDirectories;
Future<List<Directory>> _externalCacheDirectories;
Future<Directory> _downloadDirectory;
_tempDirectory = getTemporaryDirectory();
_appSupportDirectory = getApplicationSupportDirectory();
_appLibraryDirectory = getLibraryDirectory();
_appDocumentsDirectory = getApplicationDocumentsDirectory();
_externalStorageDirectory = getExternalStorageDirectory();
_externalCacheDirectories = getExternalCacheDirectories();
_externalStorageDirectories = getExternalStorageDirectories();
_downloadDirectory = getDownloadsDirectory();
需要搭配Director和File等进行操作。
import 'dart:io'; // Directory所在的包
import 'dart:convert';
Directory对象
/// 属性
// String path 获取此目录的路径
print(dir.path);
// Uri 返回表示目录位置的uri
print(dir.uri);
// 父目录的Directory对象
print(dir.parent);
// absolute 返回一个绝对路径的Directory对象
print(dir.absolute);
// 判断是否是绝对路径
print(dir.isAbsolute);
File对象
/// 创建实例
new File('path');
/// 方法
// 打印一下file实例对象
print(file); // File: 'assets\files\index.txt'
// 返回绝对路径的File实例
print(file.absolute); // File: 'C:\Users\Administrator.PW6NUH21X31RM79\Desktop\Dart\assets\files\index.txt'
// 获取文件路径
print(file.path); // assets\files\index.txt
// 是否是绝对路径
print(file.isAbsolute); // fasle
// 获取父目录的Directory对象
print(file.parent); // Directory: 'assets\files'
// 获取uri
print(file.uri); // assets/files/index.txt
创建目录
可以通过.exists()
判断目录是否存在。
create 方法有一个可选的 recursive 参数。其作用是,如果 recursive 为 false,那么只创建目录中最后一个文档夹,如果为 true,则会创建整个目录中所有不存在的文档夹。
// 根据路径字符创建目录对象
RaisedButton(
onPressed: () async {
final path = await getApplicationDocumentsDirectory();
final directory = Directory(path.path+'/base/');
print(path.path);
directory.create(recursive: true);
},
child: Text('创建目录'),
),
也可以使用如下方式创建目录,从而省略 await
关键字
directory.createSync();
读取文档
final file = File("_path");
final String content = await file.readAsString(); //
写文件
// final file = File('');
// await file.writeAsString(DateTime.now().toString());
RaisedButton(
onPressed: () async{
final path = await getApplicationDocumentsDirectory();
final file = new File(path.path+'/hi.txt');
print(file.path);
file.writeAsString('Hello World');
},
child: Text('创建文件'),
),
如何在IOS文件中显示
在“文件”应用中有一个名为“在此iPhone中”的目录,但是如果我想显示在此处写入的数据怎么办?
打开info.plist
添加
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>