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

时间:2018-01-18 12:46:29

标签: android json angular ionic-framework ionic3

我正在使用ionic 3和文件插件做一个应用程序,我正在尝试将json字符串写入我的assets文件夹下的json文件,该文件夹的层次结构如下: -assets - >模拟 - > msg-list.json,资产作为离子文件中的文件夹。

使用文件插件时:

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

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

我该怎么办?

1 个答案:

答案 0 :(得分:5)

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

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

Android file system layout

您可以使用applicationStorageDirecorythis.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(...)

第二步。

您现在可以在应用程序的各个位置读取和写入数据存储中的文件。 要编写该文件,我建议使用writeFile函数(不是writeExistingFile),因为writeExistingFile函数只是writeFile,其选项为:{replace: true}({{3 })。使用writeFile函数,您可以设置所需的选项。

export interface IWriteOptions {
  replace?: boolean;
  append?: boolean;
  truncate?: number; // if present, number of bytes to truncate file to before writing
}

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

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

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

NB: 使用:this.file.applicationDirectory而不是直接使用file:///android_asset并使用this.file.applicationStorageDirectory