繁体   English   中英

在 Flutter 中,将大文件从 Assets 文件夹复制到 Application Documents 文件夹

[英]Inside Flutter, copy large file from Assets Folder to Application Documents Folder

我尝试使用大型数据库文件。 因此,我的代码将此文件从 Assets 文件夹复制到 Application-Documents-Folder,如下面的代码示例所示。

对于小文件,我的代码工作得很好,我可以很好地处理我的数据库。

但是,如果我使用大型 db-File (> 665MB) 进行尝试,对于我的 Flutter 应用程序的 Android 部分,事情开始出现问题。 (事实上​​,iOS 工作得非常好,无论 db-File 真的有多大......)。 仅对于 Android,大型 db-File 会破坏事物。

以下 Dart 代码不适用于 Android 中的大文件 (>665MB) -(但它适用于小文件):

  Future<Database> initializeDatabase() async {

    Directory directory = await getApplicationDocumentsDirectory();
    var dbPath = join(directory.path, "ch_departures.db");

    // copy db file from Assets folder to Documents folder (only if not already there...)    
    if (FileSystemEntity.typeSync(dbPath) == FileSystemEntityType.notFound) {
     ByteData data = await rootBundle.load("assets/ch_departures.db");
     writeToFile(data, dbPath);
    }

    // Open/create the database at a given path
    var departuresDatabase = await openDatabase(dbPath);
    return departuresDatabase;
  }

  // HERE IS WHERE THE CODE CRASHES (WHEN TRYING TO WRITE THE LOADED BYTES)
  void writeToFile(ByteData data, String path) {
    final buffer = data.buffer;
    return new File(path).writeAsBytesSync(
      buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
  }

我尝试使用 Flutter 应用程序 Android 部分的gradle.properties文件。

在 gradle.properties 里面,我试过:

org.gradle.jvmargs=-Xmx3g -XX:MaxPermSize=2048m

但不幸的是,没有成功。

您对如何使用大型(> 665MB)文件进行所有这些工作有任何想法吗????

对于我遇到的Flutter的大文件副本问题,终于有了解决方案。 我创建了一个Flutter插件,该插件分别在iOS和Android中本地进行文件复制。

Flutter插件称为large_file_copy ,可在此处找到

我遇到了同样的问题,将大型 SQLite 文件从资产目录复制到应用程序文档文件夹。 我找不到任何好的解决方案。

所以我最终通过压缩缩小了 SQLite 的大小。 然后我将压缩文件复制到应用程序文档目录并提取数据库。 如果您的资产目录中有一个大文件,您可以将其压缩为拆分文件并使用“writeToFile”功能将它们一一复制......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM