android - 如何将 INI 文件写入 App Document Directory?
问题描述
我正在开发一个订单应用程序,在正确发布订单后,我想在本地保存一些数据以备将来使用。为此,我使用下面代码中定义的 writeGlobals() 函数,在应用程序的 Document 文件夹中存储了一个 ini 文件。我正在使用 path_provider 和 ini 包。我的fileutil包如下:
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:ini/ini.dart';
import '../global.dart';
Future<String> get _localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
Future<File> get _localGlobalsFile async {
final path = await _localPath;
return File('$path/globals.ini');
}
Future readGlobals() async {
final path = await _localGlobalsFile;
// ignore: unrelated_type_equality_checks
if (File('$path').exists() == true) {
_readGlobals();
} else
print(path.toString() + ' does not exist.');
}
_readGlobals() async {
var file = await _localGlobalsFile;
Config config = new Config.fromStrings(file.readAsLinesSync());
glbShipCity = config.get("cart", "glbShipCity");
glbShipHood = config.get("cart", "glbShipHood");
glbPayType = config.get("cart", "glbPayType");
glbName = config.get("cart", "glbName");
glbPhone = config.get("cart", "glbPhone");
glbStreet = config.get("cart", "glbStreet");
glbNumber = config.get("cart", "glbNumber");
glbCompl = config.get("cart", "glbCompl");
glbRef = config.get("cart", "glbRef");
glbCEP = config.get("cart", "glbCEP");
glbEmail = config.get("cart", "glbEmail");
glbCPF = config.get("cart", "glbCPF");
print("globals: ${config.get("cart", "glbShipCity")}");
print("globals: ${config.toString()}");
}
Future writeGlobals() async {
final file = await _localGlobalsFile;
Config config = new Config();
config.addSection("cart");
config.set("cart", "glbShipCity", glbShipCity);
config.set("cart", "glbShipHood", glbShipHood);
config.set("cart", "glbPayType", glbPayType);
config.set("cart", "glbName", glbName);
config.set("cart", "glbPhone", glbPhone);
config.set("cart", "glbStreet", glbStreet);
config.set("cart", "glbNumber", glbNumber);
config.set("cart", "glbCompl", glbCompl);
config.set("cart", "glbRef", glbRef);
config.set("cart", "glbCEP", glbCEP);
config.set("cart", "glbEmail", glbEmail);
config.set("cart", "glbCPF", glbCPF);
print('Writing to ${file.path}');
print("globals: ${config.toString()}");
return file.writeAsString(config.toString());
}
所有 glb* 变量都是全局定义的,并且在应用程序的每个其他部分都可以很好地工作。ini 文件的结构也是正确的。一切都编译并完美运行,除了没有写入文件夹的事实(不存在 - 或者我至少看不到它 - 顺便说一句;我认为它会在安装应用程序时创建...)。
函数 writeGlobals() 也不会抛出任何错误,但不会写入文件。这些问题在模拟器和实际设备上都会出现。所以我的问题是:
- 我需要明确创建文档文件夹吗?
- 该应用程序是否必须有一些特殊的许可?在这种情况下,我该如何申请?
感谢您的旅游帮助。
解决方案
推荐阅读
- angular - Angular 2:从其他组件触发插值不起作用
- c - C - 数字排序说明
- python - 如何在 python dateparser 中查找所有正则表达式字符串
- mysql - JSON 插入 MySQL 表或更新(如果存在)
- sql - 在 SQL 中创建日期范围
- c# - C# Visual Unity 独立 .exe 调试符号加载问题
- matlab - MATLAB App Designer 重置属性
- c# - 如何使“链接”添加到文本中?
- java - 启动 jar(maven 编译)时出错,但在 Intellij 上简单运行可以正常工作
- regex - 通过多个分隔符拆分字符串并将分隔符保留在结果中