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

Java递归写入文本文件仅保留最后内容的问题求助

解决文件写入仅保留最后一条内容的问题

嘿,你猜的完全没错!问题根源就是每次写入时都重新打开文件,而且用了默认的覆盖模式——这种模式下,每次打开文件都会清空原有内容,只保留本次写入的内容,自然最后就只剩最后一条输出了。下面给你两个实用的解决办法:

方法一:用追加模式打开文件

当你创建文件写入流的时候,只需要多传一个true参数,指定为追加模式,这样每次写入的内容都会加到文件末尾,而不是覆盖掉之前的内容。举几个常用类的例子:

  • 用FileWriter实现追加:
// 第二个参数true表示开启追加模式
FileWriter writer = new FileWriter("你的输出文件.txt", true);
  • 用FileOutputStream实现追加:
FileOutputStream fos = new FileOutputStream("你的输出文件.txt", true);
  • 用PrintWriter实现追加:
PrintWriter pw = new PrintWriter(new FileWriter("你的输出文件.txt", true));

方法二:只打开一次文件,批量写入

如果你的写入操作是在循环里执行的,那可以把文件打开的逻辑放到循环外面,写完所有内容后再关闭文件,这样就不会反复打开关闭导致覆盖了。结合你的代码片段,修改后大概是这样:

public static void jpg(File dir) throws UnsupportedEncodingException, IOException {
    String dataType = ".jpg";
    File listFile[] = dir.listFiles();
    
    // 把文件流放在循环/递归外,只初始化一次,用try-with-resources自动关闭流
    try (FileWriter writer = new FileWriter("output.txt", true)) {
        if (listFile != null) {
            for (int i = 0; i < listFile.length; i++) {
                if (listFile[i].isFile() && listFile[i].getName().endsWith(dataType)) {
                    // 写入你需要的内容,比如文件路径
                    writer.write(listFile[i].getAbsolutePath() + "\n");
                } else if (listFile[i].isDirectory()) {
                    // 如果是递归遍历子目录,追加模式依然适用,不会覆盖之前的内容
                    jpg(listFile[i]);
                }
            }
        }
    }
}

额外提醒

  • 尽量用try-with-resources语法,它会自动帮你关闭文件流,避免资源泄漏的问题。
  • 如果是递归遍历目录的场景,方法一的追加模式会更灵活,因为递归的每次调用都会打开文件,追加模式能保证所有内容都被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:25:43