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

如何仅向文本文件写入一次日期?现有代码问题排查

问题排查与修复方案

Hey,我来帮你捋捋代码里的问题——你遇到的每次运行都覆盖日期、无法读取旧内容的情况,核心是流的初始化时机和FileWriter的默认行为出了问题,我一步步给你拆解:

为啥你的代码会失效?

  1. FileWriter默认清空文件:你在代码开头就创建了FileWriter writer = new FileWriter(file);,这个构造函数的默认逻辑是直接截断(清空)目标文件,不管后面的file.length()判断,所以哪怕文件原本有内容,也会被先清空,导致后续读取不到旧日期。
  2. 流的顺序搞反了:你先打开写入流,再打开读取流,这时候文件已经被清空,file.length()必然为0,程序永远只会走写入分支,根本没机会读取旧内容。
  3. 资源泄漏风险:如果程序走到读取分支,写入流没有被关闭,会造成IO资源泄漏;而且手动调用close()很容易遗漏异常场景下的关闭操作。
  4. 未处理文件不存在的情况:如果是首次运行,文件还没创建,new FileReader("outTest.txt")会直接抛出FileNotFoundException,原代码没处理这个场景。

修复后的完整代码

我用Java 7+支持的try-with-resources语法自动管理流(不用手动关流),同时调整了逻辑顺序,先判断文件状态再决定操作:

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws IOException {
        File dateFile = new File("outTest.txt");
        SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
        String currentTime = timeFormat.format(new Date());

        // 先判断:文件不存在 或者 文件为空(首次运行)
        if (!dateFile.exists() || dateFile.length() == 0) {
            // try-with-resources自动关闭FileWriter,无需手动close
            try (FileWriter writer = new FileWriter(dateFile)) {
                writer.write(currentTime);
                writer.flush();
                System.out.println("首次运行,已写入当前时间:" + currentTime);
            }
        } else {
            // 读取已有文件内容并输出
            try (FileReader fileReader = new FileReader(dateFile);
                 BufferedReader bufferedReader = new BufferedReader(fileReader)) {
                String savedTime;
                while ((savedTime = bufferedReader.readLine()) != null) {
                    System.out.println("读取到已保存的时间:" + savedTime);
                }
            }
        }
    }
}

关键改动说明

  • 先判断再操作:先检查文件是否存在或为空,再决定打开写入流还是读取流,彻底避免提前清空文件的问题。
  • try-with-resources自动关流:所有IO流都在try()块中声明,JVM会在代码块结束后自动关闭它们,既安全又省心。
  • 明确处理文件不存在场景:新增!dateFile.exists()判断,覆盖首次运行创建文件的情况,避免读取不存在的文件抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:17:47