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

VSCode调试Java程序时PrintWriter无法写入本地文件的问题

VSCode调试Java时PrintWriter写文件为空?看这解决

问题情况

写了个用PrintWriter往txt文件写内容的Java程序,CMD里用javac编译、java运行都正常,文件能写出内容;但在VSCode里按F5调试,目标txt文件就是空的。代码示例:

import java.io.*;

public class Count {

    public static void main(String[] args) throws IOException {
        PrintWriter pw = new PrintWriter("count1m.txt");
        for (int i = 1; i <= 1000000; i++) {
            pw.println(i);
        }
        pw.close();
    }
}

问题根源

核心是工作目录不一致:

  • CMD运行时,你的工作目录是.java文件所在的文件夹,所以文件直接生成在这个文件夹下,你能看到。
  • VSCode调试默认的工作目录是你打开的项目根目录,不是.java文件所在的子目录。你以为文件是空的,其实它生成在项目根目录里了;当然也有极小概率是调试时程序提前终止,pw.close()没执行,但你代码里close()在循环结束后,这种情况很少见。

解决方法

1. 用绝对路径写文件

直接指定文件的完整路径,比如:

PrintWriter pw = new PrintWriter("D:/code/java-demo/count1m.txt");

这样不管工作目录在哪,都会写到你指定的位置,不会出错。

2. 修改VSCode调试的工作目录

  • 打开VSCode调试面板,点齿轮图标打开launch.json配置文件。
  • 在对应的Java调试配置里,加个cwd字段,设置成当前.java文件的目录:
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Debug (Launch) - Count",
            "request": "launch",
            "mainClass": "Count",
            "cwd": "${fileDirname}" // 这行是关键,指向当前文件所在目录
        }
    ]
}

${fileDirname}是VSCode自带的变量,自动取当前打开的.java文件的目录,这样调试时的工作目录就和CMD里一致了。

3. 去默认目录找文件

如果不想改配置,直接去你在VSCode里打开的项目根目录看看,count1m.txt大概率在那,而且已经有内容了。

小技巧

怕再踩路径坑?可以在代码里加一行打印当前工作目录的代码,直接看文件生成在哪:

System.out.println("当前工作目录:" + System.getProperty("user.dir"));

运行后控制台会输出路径,跟着找就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:46:06