You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Java开发如何实现JSON文件存储所有输入数据不覆盖

问题核心原因
  • 当前FileWriter默认使用覆盖写入模式,每次写文件都会清空原有内容
  • 存储结构为单个JSONObject,没有收纳多条数据的容器,就算改为追加写入也会生成格式非法的JSON内容,无法正常解析
修改实现方案

核心逻辑:每次保存新数据前,先读取本地已存储的所有历史数据,解析为JSONArray,把新输入的内容封装为JSONObject追加到数组末尾后,再将完整数组写回文件即可。
修改后的代码如下:

saveButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            String getName = editTextFileName.getText().toString();
            String getData = editTextData.getText().toString();
            // 封装新的输入数据为JSONObject
            JSONObject newUser = new JSONObject();
            newUser.put("Name", getName);
            newUser.put("Enroll_No", getData);
            newUser.put("Mobile", "4.example");
            newUser.put("Address", "4.example");
            newUser.put("Branch", "4.example");

            File file = new File(context.getFilesDir(), "user.json");
            JSONArray userArray = new JSONArray();

            // 先读取本地已有的历史数据
            if (file.exists() && file.length() > 0) {
                FileInputStream fis = context.openFileInput("user.json");
                int size = fis.available();
                byte[] buffer = new byte[size];
                fis.read(buffer);
                fis.close();
                String jsonStr = new String(buffer, StandardCharsets.UTF_8);
                // 把已有内容解析为JSONArray
                userArray = new JSONArray(jsonStr);
            }

            // 把新数据追加到数组末尾
            userArray.put(newUser);

            // 把完整数组写回文件,覆盖原有内容
            FileWriter fileWriter = new FileWriter(file);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(userArray.toString());
            bufferedWriter.close();

        } catch (JSONException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
});
读取所有录入数据的示例

需要查看全量数据时,直接读取user.json文件解析为JSONArray遍历即可:

try {
    File file = new File(context.getFilesDir(), "user.json");
    if (file.exists() && file.length() > 0) {
        FileInputStream fis = context.openFileInput("user.json");
        int size = fis.available();
        byte[] buffer = new byte[size];
        fis.read(buffer);
        fis.close();
        String jsonStr = new String(buffer, StandardCharsets.UTF_8);
        JSONArray userArray = new JSONArray(jsonStr);
        // 遍历获取所有数据
        for (int i = 0; i < userArray.length(); i++) {
            JSONObject user = userArray.getJSONObject(i);
            String name = user.getString("Name");
            String enrollNo = user.getString("Enroll_No");
            // 这里处理每条数据,比如渲染到列表控件里
        }
    }
} catch (IOException | JSONException e) {
    e.printStackTrace();
}

内容的提问来源于stack exchange,提问作者Muratcan Yıldız

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:09:02