当我第一次在手机上创建文件时,当我尝试读取它时,我没有遇到任何问题,我读取了它,但当我尝试读取我没有通过我的应用程序创建的文件时,访问被拒绝。我的错误在下面;
[错误:flutter/runtime/dart_vm_initializer.cc(41)]无法处理的异常:FileSystemException:无法打开文件,路径= '/storage/emulated/0/Download/Bka_data.cvs'(操作系统错误:权限被拒绝,错误号= 13)
写函数为:
Future<void> restore() async {
final PermissionStatus permissionStatus = await Permission.storage.request();
if (permissionStatus == PermissionStatus.granted) {
final Database db = await SQLHelper.db();
await db.delete("spendinfo");
final fileName = "Bka_data.cvs";
var path = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS);
final directory = "$path/$fileName";
final File f = File(directory);
final List<List<dynamic>> csvData = CsvToListConverter().convert(await f.readAsString());
final List<spendinfo> lastList = csvData.map((csvRow) => spendinfo.fromCVSObjetct(csvRow)).toList();
for (var i = 0; i < lastList.length; i++) {
SQLHelper.createItem(lastList[i]);
print(lastList[i].id);
}
} else {
}
}
读函数为:
Future <void> writeToCvs() async {
final PermissionStatus permissionStatus = await Permission.storage.request();
if (permissionStatus == PermissionStatus.granted) {
final Database db = await SQLHelper.db();
final List<Map<String, dynamic>> allData = await db.query("spendinfo", orderBy: "id") ;
final List<List<dynamic>> rows = <List<dynamic>>[];
var path = await ExternalPath.getExternalStoragePublicDirectory(ExternalPath.DIRECTORY_DOWNLOADS);
print("dir $path");
String file = "$path";
for(final Map<String, dynamic> map in allData) {
final List<dynamic> row = map.values.toList();
print(row) ;
rows.add(row);
}
final String fileName = "Bka_data.cvs";
final directory = "$path/$fileName";
final File f = File(directory);
final String cvs = ListToCsvConverter().convert(rows);
await f.writeAsString(cvs);
//print(filePath);
print("Yüklendi");
} else {
// accses is denied
}
}
我试过其他的许可。
1条答案
按热度按时间0kjbasz61#
我认为问题在于,Android实现了范围存储,在其中您无法直接读取从其他应用程序创建的公共文件。
您可以使用下面的包通过最新的存储访问框架获取文件-
https://pub.dev/packages/shared_storage