Json没有被写入文件

时间:2019-07-10 05:37:21

标签: java android json file filewriter

我已经从editText中获取输入,并尝试将其文本写入json文件。当我执行代码时,它可以正常工作而没有任何错误。但是,当我尝试再次读取json文件时,它没有以前写入的对象。

我尝试使用BufferedWriter,FileWriter等不同的编写器。它们都不起作用。

这是writeToJsonFile方法


void writeJsonFile(TextView textView) {
        String json;
        try {
            InputStream is = context.getAssets().open("chores.json");
            int size = is.available();
            byte[] buffer = new byte[size];
            if (is.read(buffer) == -1) {
                throw new EOFException();
            }
            is.close();
            json = new String(buffer, StandardCharsets.UTF_8);

            JSONObject obj = new JSONObject(json);
            JSONObject m_jArray = obj.getJSONObject("chores");
            JSONArray jsonArray = m_jArray.getJSONArray(title);

            JSONObject new_jobj = new JSONObject();
            new_jobj.put("task", textView.getText());
            new_jobj.put("isCompleted", false);

            jsonArray.put(new_jobj);

            File file = new File(context.getExternalFilesDir("/assets"), "chores.json");
            writeJsonFile(file, obj);
            Log.i("Done => ", "Written to file");


        } catch (EOFException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

此函数获取一个文件和一个json对象,并将json对象写入文件中


public static void writeJsonFile(File file, JSONObject json) throws IOException {
    FileWriter fileWriter = new FileWriter(file);
    fileWriter.write(json.toString());
    if (fileWriter != null) {
        fileWriter.close();
    }
}

我希望它将json字符串写入文件,但是下次我再次使用InputStream读取文件时,它不会显示先前添加的对象。

期望的chores.json

{
  "chores": {
    "Daily": [
      {
        "task": "Task 1",
        "isCompleted": false
      }

    ],
    "Weekly": [

    ],
    "Monthly": [

    ],
    "Custom": [

    ]
  }
}

产生json

{
  "chores": {
    "Daily": [

    ],
    "Weekly": [

    ],
    "Monthly": [

    ],
    "Custom": [

    ]
  }
}

3 个答案:

答案 0 :(得分:0)

您没有将新创建的对象写入文件:例如:

        ...
        JSONObject new_jobj = new JSONObject();
        new_jobj.put("task", textView.getText());
        new_jobj.put("isCompleted", false);

        jsonArray.put(new_jobj);

        File file = new File(context.getExternalFilesDir("/assets"), "chores.json");
        // here instead of old obj write newly created new_jobj to file.

        writeJsonFile(file, new_jobj);
        Log.i("Done => ", "Written to file");
        ...

答案 1 :(得分:0)

在此之前,请确保您具有 read and write storage permisions ....

Ex.

try 
{
    Writer output = null;
    File file = new File("filePath");
    if (!file.getParentFile().exists()) {
        file.getParentFile().mkdirs();
    }
    if (!file.exists()) {
        file.createNewFile();
    }
    output = new BufferedWriter(new FileWriter(file));
    output.write(jsonObject.toString());
    output.close();
} catch (Exception e) {
    e.printStackTrace();
}

答案 2 :(得分:-1)

您可以在FileWriter构造函数中使用append属性。你可以尝试一下。

FileWriter fileWriter = new FileWriter(file,true);