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

Java BufferedWriter文件不存在时无法创建文本文件问题求助

问题:BufferedWriter无法自动创建文件,仅能写入已存在文件

我尝试使用BufferedWriter类创建并写入文本文件,但文件始终无法创建,也未生成任何错误。不过若预先创建好文本文件并指定路径,程序就能正常写入;看起来该类仅无法自动创建文件。恳请各位提供解决建议,提前感谢。

代码如下:

public class test3 {
public static void main(String[] args) throws IOException {
    int ctr = 1;
    int count = 10;
    Random r = new Random();
    String[] textData = new String[count*3];
    
    String storeFile = "testComplete";
    String fn = "C:\\Users\\13023\\eclipse-workspace\\test\\src\\testprac\\" + storeFile;
    for (int i = 0; i < count*3; i++) {
        textData[i] = "Test";
        textData[i+1] = "Tes";
        textData[i+2] = "T";
        ctr++;
        i = i + 2;
    }
    
    BufferedWriter BW = new BufferedWriter(new FileWriter(fn));
    int j = 0;
    for (String s:  textData) {
        BW.write(textData[j] + "\n");
        System.out.println("done");
    }
    BW.close();
}
}

解决建议

核心问题排查

  1. 文件名无后缀导致识别偏差:你指定的文件名testComplete没有.txt后缀,Windows系统会将其标记为「未知类型文件」,可能你误以为文件没创建,但实际上它已经生成了,只是系统没按文本文件显示。
  2. 目标目录不存在导致创建失败:如果fn指向的目录不存在,FileWriter无法自动创建目录,自然也创建不了文件。
  3. 异常未被捕获输出:代码直接抛出IOException,如果运行时出现权限不足等异常,你可能没看到错误信息,误以为没有报错。

具体修正步骤

  • 添加文件后缀:将storeFile改为"testComplete.txt",方便系统识别和你查找文件。
  • 确保目标目录存在:在创建FileWriter前,先检查并递归创建所有不存在的父目录:
    File file = new File(fn);
    file.getParentFile().mkdirs();
    
  • 修正循环逻辑:增强for循环无需额外的j变量,直接遍历元素即可,避免重复写入同一个内容:
    for (String s : textData) {
        bw.write(s + "\n");
        System.out.println("done");
    }
    
  • 使用try-with-resources管理流:自动关闭流,同时捕获异常并打印,方便快速定位问题:
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(fn))) {
        // 写入逻辑
    } catch (IOException e) {
        e.printStackTrace();
    }
    

修正后的完整代码

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class test3 {
    public static void main(String[] args) {
        int count = 10;
        String[] textData = new String[count * 3];
        
        // 添加.txt后缀
        String storeFile = "testComplete.txt";
        String fn = "C:\\Users\\13023\\eclipse-workspace\\test\\src\\testprac\\" + storeFile;
        
        // 初始化数组,优化循环写法
        for (int i = 0; i < count * 3; i += 3) {
            textData[i] = "Test";
            textData[i+1] = "Tes";
            textData[i+2] = "T";
        }
        
        // 确保目标目录存在
        File file = new File(fn);
        file.getParentFile().mkdirs();
        
        // 使用try-with-resources自动管理流资源
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(fn))) {
            for (String s : textData) {
                bw.write(s + "\n");
                System.out.println("done");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:45