我试图将sqlite数据库从根分发包复制到文件系统上以便使用它。
我尝试了许多不同的方法,但它总是最终向磁盘写入不正确的数据量。我使用的代码如下所示:
Directory appDocDir = await getExternalStorageDirectory();
String path = join(appDocDir.path, "data.db");
bool exists = await new File(path).exists();
if (!exists) {
var out = new File(path).openWrite();
var data = await rootBundle.load("assets/data.sqlite");
var list = data.buffer.asUint8List();
out.write(list);
out.close();
}
答案 0 :(得分:1)
您无法使用collections.defaultdict
(旨在对File
参数进行操作)将Uint8List
的内容写入String
。您最终会在String
上调用toString()
来编写Uint8List
获得的Uint8List
的UTF-8编码表示,这可能比列表的实际内容大得多。
相反,您可以使用IOSink.write
将{{1}}写入文件。
在您提供的示例中,您还可以使用IOSink.add
一次性编写整个文件。
答案 1 :(得分:1)
我能够做到以下几点。
ByteData data = await rootBundle.load("data.sqlite");
List<int> bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes);
Directory appDocDir = await getApplicationDocumentsDirectory()
String path = join(appDocDir.path, "data.db");
await File(path).writeAsBytes(bytes);