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
相关产品推荐
相关产品推荐

