如何写入存储在资产文件夹中的json文件?

时间:2018-04-02 09:57:12

标签: android json

我的应用程序资产文件夹中有一个config.json文件。现在的情况是,我将从服务器中提取JSON内容,并将更新(覆盖)存储在asset文件夹中的config.json文件。我怎样才能做到这一点?以下是JSON示例:

{
    "id": 1,
    "name": "A green door",
    "price": 12.50,
    "tags": ["home", "green"]
}

我能够从资产文件夹中读取文件。但是如何写入该文件?:

public String loadJSONFromAsset() {
    String json = null;
    try {
        InputStream is = getActivity().getAssets().open("config.json");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }
    return json;
}

3 个答案:

答案 0 :(得分:3)

您无法写入资产文件夹。因为它是一个只读文件夹。相反,您需要将文件保存到您的应用程序文件夹。每当您想使用配置时,请检查您的应用程序文件夹中是否存在该文件。如果它存在,使用它,如果不存在,使用默认值。

例如,当您获得config.json时,请保存文件:

File file = new File(context.getFilesDir(), "config.json");

String config = "";
if(file.exists()) {
  // use the config.
} else {
  // use the config from asset.
}

然后,无论何时使用,请阅读:

  # Indexes + Directory Root.
  DirectoryIndex index.php
  DocumentRoot /var/www/html/mywebsite/public
  ServerName dev.mywebsite.test
  <Directory "/var/www/html/mywebsite/public">
  Options All
  AllowOverride All
  Allow from all

  </Directory>

Save Files on Device Storage了解详情以保存文件。

答案 1 :(得分:2)

无论我们在资源文件夹中保留哪些文件,都无法在运行时进行修改。在APK中,文件是只读的。我们既不能删除也不能在此目录中创建任何文件。

  

您可以做的是将新的JSON写入文件(例如,getFilesDir())   As this answers suggests

答案 2 :(得分:1)

您无法将数据写入asset / Raw文件夹,因为它已打包(.apk)且大小不可扩展。 check here