
本文介绍在 android 应用中安全修改本地 json 文件(如 credentials.txt)的正确方法:先读取完整 json 数据,修改目标字段(如 age),再整体写回,避免丢失其他字段。
本文介绍在 android 应用中安全修改本地 json 文件(如 credentials.txt)的正确方法:先读取完整 json 数据,修改目标字段(如 age),再整体写回,避免丢失其他字段。
在 Android 开发中,直接使用 FileOutputStream 覆盖写入 JSON 字符串(如仅写入 {"age":"40"})会导致原文件内容被完全替换,从而丢失 "name" 和 "gender" 等原有字段——这本质上不是“更新”,而是“重置”。JSON 是结构化数据,不支持局部字节级修改;必须遵循“读–改–写”三步流程,确保数据完整性。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
✅ 正确实现步骤
-
读取现有 JSON 文件为字符串
使用 openFileInput() 读取 credentials.txt,并转换为 String:
private String readJsonFromFile() {
StringBuilder content = new StringBuilder();
try (InputStream is = openFileInput("credentials.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line);
}
} catch (IOException e) {
Log.e("JSON", "Failed to read file", e);
return "{}";
}
return content.toString();
}-
解析、修改并序列化 JSON
利用 JSONObject 安全解析与更新字段(自动处理键不存在、类型校验等):
String jsonStr = readJsonFromFile();
try {
JSONObject jsonObject = new JSONObject(jsonStr);
jsonObject.put("age", "40"); // 仅更新 age,其余字段保留
String updatedJson = jsonObject.toString();
// 写回文件(覆盖原文件)
FileOutputStream fos = openFileOutput("credentials.txt", MODE_PRIVATE);
fos.write(updatedJson.getBytes(StandardCharsets.UTF_8));
fos.close();
startActivity(new Intent(this, MainMenu.class));
} catch (JSONException | IOException e) {
Log.e("JSON", "Failed to update JSON", e);
}⚠️ 关键注意事项
- 务必指定字符编码:getBytes(StandardCharsets.UTF_8) 替代无参 getBytes(),防止中文或特殊字符乱码;
- 使用 try-with-resources 或显式 close():避免文件句柄泄漏;
- 异常需妥善处理:JSONException 可能因原始 JSON 格式损坏触发,建议添加默认 fallback(如初始化空对象);
- 线程安全:此操作应在后台线程(如 AsyncTask、Coroutine 或 ExecutorService)执行,避免阻塞主线程;
- 替代方案考虑:若频繁读写,推荐迁移到 SharedPreferences(适合键值对)或 Room 数据库(适合复杂结构)。
? 总结
没有“只改 age 字段而不碰其他内容”的底层文件操作捷径。JSON 的文本本质决定了修改必须基于完整对象模型。坚持“读→解析→修改→序列化→写回”范式,既是最佳实践,也是数据安全的唯一可靠路径。

















