我已经从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": [
]
}
}
答案 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);