使用FileDialog选文件后Scanner抛出FileNotFoundException的问题求助
问题原因与解决方法
核心问题
- File对象创建错误:你写的
new File("filename")是在尝试读取一个名为filename的固定文件,而非用户选择的目标文件,应该使用变量filename而非字符串字面量。 - 缺少完整文件路径:
FileDialog.getFile()仅返回文件名,不包含文件所在的目录,直接用它创建File对象会导致程序在当前工作目录下查找该文件,自然找不到用户选择的文件。
修正后的代码
public void readItemData() { try { Frame frame = null; FileDialog fileBox = new FileDialog(frame, "Open", FileDialog.LOAD); fileBox.setVisible(true); // 先判断用户是否取消了文件选择 String filename = fileBox.getFile(); String directory = fileBox.getDirectory(); if (filename == null || directory == null) { System.out.println("用户取消了文件选择"); return; } // 用目录+文件名创建File对象,双参数构造器会自动处理不同系统的路径分隔符 File inFile = new File(directory, filename); System.out.println("文件绝对路径:" + inFile.getAbsolutePath()); Scanner fileScanner = new Scanner(inFile); // 逐行读取用hasNextLine()和nextLine(),next()是按空白符分割读取内容 while (fileScanner.hasNextLine()) { String line = fileScanner.nextLine(); System.out.println(line); } fileScanner.close(); // 记得关闭资源避免内存泄漏 } catch (FileNotFoundException ex) { System.out.println("找不到指定文件:" + ex.getMessage()); } }
额外说明
- 优先使用
File(directory, filename)构造器,它会根据操作系统自动适配路径分隔符(Windows用\,Linux用/),比手动字符串拼接更可靠。 - 若要实现逐行读取,需搭配
hasNextLine()和nextLine(),原代码中的next()是按空白符分割读取内容,并非真正的逐行读取。 - 必须处理用户取消选择的场景,此时
getFile()会返回null,避免后续代码触发空指针异常。
内容的提问来源于stack exchange,提问作者Massiveegg9
相关产品推荐
相关产品推荐

