我正在尝试将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(); }
你不能的内容写入Uint8List到一个File使用IOSink.write(其目的是对操作String参数)。您将最终String通过调用toString()your 来编写获得的UTF-8编码表示形式Uint8List,它可能比列表的实际内容大得多。
Uint8List
File
IOSink.write
String
toString()
相反,您可以使用将A写入Uint8List文件IOSink.add。
IOSink.add
在您提供的示例中,您还可以使用一次写入整个文件new File(path).writeAsBytes(list)。
new File(path).writeAsBytes(list)