覆盖 JSON 对象,而不完全替换文件 Android Studio

Overwrite JSON object without replacing the file completely Android Studio

提问人:Hiraeths 提问时间:6/12/2023 更新时间:6/13/2023 访问量:35

问:

基本上,我正在尝试覆盖以下JSON数据

{
    "name" : "John Doe",
    "gender" : "male",
    "age" : "21"
}

我的目标是只取代年龄。所以我使用FileOutputStream,如下所示

JSONObject object = new JSONObject();
try {
    object.put("age", "40");

} catch (JSONException e) {
    //do smthng
}

String textToSave = object.toString();

try {
    FileOutputStream fileOutputStream = openFileOutput("credentials.txt", MODE_PRIVATE);
    fileOutputStream.write(textToSave.getBytes());
    fileOutputStream.close();
    intentActivity(MainMenu.class);

} catch (FileNotFoundException e) {
    //do smthng
} catch (IOException e) {
    //do smhtng
}

但是使用上面的代码,我意识到它完全删除了现有的代码,这意味着我丢失了 and 值。无论如何,只是为了替换?谢谢credentials.txtnamegenderage

Java JSON Android-Studio 输入 文件输出流

评论


答:

0赞 Michael Gantman 6/12/2023 #1

基本上,你的问题的答案是否定的。你的行动方案是

  1. 将文件读入内存,
  2. 修改内存中的内容
  3. 使用修改后的内容覆盖旧文件。

以下是关于如何修改文本文件的问题: 在 Java 中修改现有文件内容

0赞 Hiraeths 6/13/2023 #2

我已经找到了答案。基本上,我需要读取现有的JSON文件,然后替换现有的JSON对象值

private void writeFile(String age) {
    try {
        FileInputStream fileInputStream = openFileInput("credentials.json");
        InputStreamReader isr = new InputStreamReader(fileInputStream);
        BufferedReader br = new BufferedReader(isr);

        StringBuilder jsonStringBuilder = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            jsonStringBuilder.append(line);
        }
        br.close();

        String jsonString = jsonStringBuilder.toString();
        JsonParser jsonParser = new JsonParser();
        JsonObject jsonObject = jsonParser.parse(jsonString).getAsJsonObject();

        jsonObject.addProperty("age", age);

        FileOutputStream fileOutputStream = openFileOutput("credentials.json", MODE_PRIVATE);
        OutputStreamWriter osw = new OutputStreamWriter(fileOutputStream);
        BufferedWriter bw = new BufferedWriter(osw);

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String updatedJsonString = gson.toJson(jsonObject);

        bw.write(updatedJsonString);
        bw.flush();
        bw.close();

    } catch (FileNotFoundException e) {
        intentActivity(Login.class);
    } catch (IOException e) {
        intentActivity(Login.class);
    }
}