Ionic 3 File插件,无法在设备上写入文件

Kak*_*ime 1 android json ionic-framework ionic3 angular

我正在使用离子3和文件插件做一个应用程序,我试图写一个json字符串到我的资产文件夹下的json文件,这个层次结构:-assets - > mock - > msg-list.json,资产为来自离子文件的文件夹.

使用文件插件时:

this.file.writeExistingFile("file://android_asset/www/assets/mock/","msg-list.json",JSON.stringify(data))
            .catch(
              error => {
                console.log(error);
              }
          );
Run Code Online (Sandbox Code Playgroud)

我总是得到代码1000的错误,这是坏网址的一个,我确实删除文件后的"/":(已经有3)仍然得到1000代码错误.

我该怎么办 ?

Fet*_*rij 5

应用程序文件夹(file:// android_asset)是只读的,因此您无法在此文件夹中写入

请阅读自述文件https://github.com/apache/cordova-plugin-file

Android文件系统布局

你可以使用applicationStorageDirecory(this.file.applicaTionStorageDirecory)/ data/data /:app-id:,你可以在那里写.

所以你的解决方案就是

第一步.

msg-list.json启动应用程序时将文件从应用程序的文件复制assets/mock到数据存储文件(在app.component.ts中添加此文件并在平台上准备好)

 this.file.copyFile(this.file.applicationDirectory + '/www/assets/mock', 'msg-list.json', this.file.applicationStorageDirectory, 'msg-list.json').then(...)
Run Code Online (Sandbox Code Playgroud)

第二步.

您现在可以在应用程序的任何位置读取和写入数据存储中的文件.为了写我建议使用文件writeFile 功能(不writeExistingFile),因为该writeExistingFile功能只是writeFile与该选项:{replace: true}(见源码她).使用writeFile函数,您可以设置所需的选项.

export interface IWriteOptions {
  replace?: boolean;
  append?: boolean;
  truncate?: number; // if present, number of bytes to truncate file to before writing
}
Run Code Online (Sandbox Code Playgroud)

所以为了编辑数据存储中的文件,我会使用如下:

this.file.writeFile(this.file.applicationStorageDirectory,"msg-list.json",JSON.stringify(data), {append: true}).then(...).catch(...)
Run Code Online (Sandbox Code Playgroud)

最后.总是使用数据存储文件.

注意:使用:this.file.applicationDirectory而不是直接file:///android_asset使用和使用this.file.applicationStorageDirectory