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

Java AWT菜单中FileReader无法找到xyz.txt文件的路径问题

解决Java AWT程序中FileNotFoundException的问题

嗨,我来帮你搞定这个文件找不到的问题~ 核心原因是你用的xyz.txt是相对路径,这个路径对应的是程序运行时的工作目录,而不是你项目里的根目录、src目录或者包目录。下面给你几个可行的解决方案:

1. 找到并放置到程序的工作目录

你可以先在代码里加一行,打印出当前程序的工作目录:

// 可以加在MenuDemo构造方法里,或者main方法开头
System.out.println("当前工作目录:" + System.getProperty("user.dir"));

运行程序后,控制台会输出一个具体路径,把xyz.txt文件直接放到这个路径下,再运行程序点击菜单项就能正常读取了。

2. 把文件放在类路径下,用类加载器读取(推荐)

如果想把文件放在项目内部(比如src目录),可以用类加载器来读取,这样不管程序在哪运行都能稳定找到文件,步骤如下:

  • 把xyz.txt放到项目的src根目录下
  • 修改你读取文件的代码,替换原来的FileReader部分:
else {
    try {
        // 用类加载器获取类路径下的文件输入流
        InputStream is = getClass().getResourceAsStream("/xyz.txt");
        if (is == null) {
            ta.setText("找不到类路径下的xyz.txt文件");
            return;
        }
        InputStreamReader fr = new InputStreamReader(is);
        ta.setText("Following are file contents:\n\n");
        int temp;
        while( (temp = fr.read()) != -1) {
            char ch = (char) temp;
            String s1 = String.valueOf(ch);
            System.out.println(s1);
            ta.append(s1);
        }
        fr.close();
    } catch(IOException e1) {
        ta.setText("Exception: " + e1);
    }
}

这样编译后,文件会被自动复制到编译输出目录(比如target/classes或者bin目录),程序就能正常读取了。

3. 使用绝对路径(不推荐)

你也可以直接写文件的绝对路径,比如:

FileReader fr = new FileReader("D:/Projects/AWT menu/xyz.txt");

但这种方式不够灵活,换个环境或者电脑就需要修改路径,所以不推荐使用。

为什么之前放的位置不行?

因为IDE运行程序时的工作目录不一定是你放文件的目录,比如有些IDE默认工作目录是项目根目录,但如果你的IDE设置不同,或者你打包成jar运行时工作目录发生变化,就会找不到文件。所以用前两种方法更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:24