一尘不染

将资产从捆绑包复制到文件系统

flutter

我正在尝试将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();
}

阅读 350

收藏
2020-08-13

共1个答案

一尘不染

你不能的内容写入Uint8List到一个File使用IOSink.write(其目的是对操作String参数)。您将最终String通过调用toString()your
来编写获得的UTF-8编码表示形式Uint8List,它可能比列表的实际内容大得多。

相反,您可以使用将A写入Uint8List文件IOSink.add

在您提供的示例中,您还可以使用一次写入整个文件new File(path).writeAsBytes(list)

2020-08-13