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(); } }
解决建议
核心问题排查
- 文件名无后缀导致识别偏差:你指定的文件名
testComplete没有.txt后缀,Windows系统会将其标记为「未知类型文件」,可能你误以为文件没创建,但实际上它已经生成了,只是系统没按文本文件显示。 - 目标目录不存在导致创建失败:如果
fn指向的目录不存在,FileWriter无法自动创建目录,自然也创建不了文件。 - 异常未被捕获输出:代码直接抛出
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
相关产品推荐
相关产品推荐

