提问人:Hiraeths 提问时间:6/12/2023 更新时间:6/13/2023 访问量:35
覆盖 JSON 对象,而不完全替换文件 Android Studio
Overwrite JSON object without replacing the file completely Android Studio
问:
基本上,我正在尝试覆盖以下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.txt
name
gender
age
答:
0赞
Michael Gantman
6/12/2023
#1
基本上,你的问题的答案是否定的。你的行动方案是
- 将文件读入内存,
- 修改内存中的内容
- 使用修改后的内容覆盖旧文件。
以下是关于如何修改文本文件的问题: 在 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);
}
}
评论