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

Android(Java)内部存储文件追加写入、读取及日期差值计算问题

Android 内部存储实现日期追加存储与读取方案

一、追加写入日期到内部存储

要实现多次追加数据,核心是使用Context.MODE_APPEND模式打开文件输出流,同时建议每个日期单独占一行,方便后续逐行读取。这样每次写入新日期时,会自动追加到文件末尾,不会覆盖原有内容。

代码示例:

// 保存日期到内部存储
private void saveDate(String dateStr) {
    // 先检查现有日期数量,最多存200个
    List<String> existingDates = readAllDates();
    if (existingDates.size() >= 200) {
        // 超过上限,停止写入
        return;
    }

    try (FileOutputStream fos = openFileOutput("dates.txt", Context.MODE_APPEND);
         OutputStreamWriter osw = new OutputStreamWriter(fos);
         BufferedWriter bw = new BufferedWriter(osw)) {
        // 写入日期+换行符,确保每行一个日期
        bw.write(dateStr);
        bw.newLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

二、逐个读取存储的日期

通过BufferedReader逐行读取文件内容,将每个日期字符串存入List,后续可直接用这个列表进行差值计算。

代码示例:

// 读取所有存储的日期
private List<String> readAllDates() {
    List<String> dateList = new ArrayList<>();
    try (FileInputStream fis = openFileInput("dates.txt");
         InputStreamReader isr = new InputStreamReader(fis);
         BufferedReader br = new BufferedReader(isr)) {
        String line;
        // 逐行读取,直到文件末尾
        while ((line = br.readLine()) != null) {
            if (!line.trim().isEmpty()) { // 跳过空行
                dateList.add(line.trim());
            }
        }
    } catch (IOException e) {
        // 文件不存在时初始化空列表即可
        e.printStackTrace();
    }
    return dateList;
}

三、日期差值计算示例

推荐使用Java 8引入的java.time包(Android API 26+支持,低版本可通过Desugar兼容),解析日期字符串后直接计算天数差。

代码示例:

// 计算两个日期的天数差
private long calculateDateDiff(String dateStr1, String dateStr2) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    try {
        LocalDate date1 = LocalDate.parse(dateStr1, formatter);
        LocalDate date2 = LocalDate.parse(dateStr2, formatter);
        // 返回两个日期的天数差(绝对值)
        return Math.abs(ChronoUnit.DAYS.between(date1, date2));
    } catch (DateTimeParseException e) {
        e.printStackTrace();
        return -1; // 解析失败返回错误标识
    }
}

关键注意事项

  • 统一日期格式:DatePicker获取日期后,务必转换为固定格式(如yyyy-MM-dd)再存储,避免解析时出错。
  • 上限控制:写入前先读取现有日期数量,确保不超过200个的限制。
  • 异常处理:文件操作可能抛出IO异常,需做好捕获和处理,避免崩溃。

内容的提问来源于stack exchange,提问作者Chig Bungus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:52:39