Java文件读取代码Eclipse环境运行无打印输出问题排查求助
问题原因及修复方案
核心问题1:异常被静默吞噬,无法感知文件不存在错误
你的代码中catch (FileNotFoundException exception)块是空的,当Items.txt的存放位置不符合Eclipse的默认读取路径时,会直接抛出异常但不输出任何错误信息,表现为程序无报错无输出。
Eclipse默认读取文件的工作路径是当前项目的根目录(而非src文件夹、编译输出class文件夹),请先确认你把Items.txt放在了项目根目录下,而非其他子目录。
核心问题2:StringTokenizer分隔符使用错误
StringTokenizer的第二个参数是分隔符字符集合,不支持正则表达式语法,你填写的"[|]"会把[、|、]三个字符都识别为分隔符,虽然你当前的文件内容没有[]不会触发异常,但属于逻辑错误,应该修改为"|"即可。
其他优化点
- 建议在catch块中添加异常打印逻辑,方便定位问题
- 最后部分行的第三个字段前带空格,建议调用
trim()处理后再赋值给type - 资源类(Scanner)建议用try-with-resources语法自动关闭,避免手动关闭遗漏
修复后可运行代码
import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.util.StringTokenizer; public class HW3 { public static void main(String[] args){ String name; String type; float cost; // 用try-with-resources自动关闭Scanner try (Scanner filereader = new Scanner(new File("Items.txt"))) { while(filereader.hasNextLine()) { String CurrentLine = filereader.nextLine(); // 分隔符修改为正确的| StringTokenizer SplitLine = new StringTokenizer(CurrentLine, "|"); name = SplitLine.nextToken(); cost = Float.parseFloat(SplitLine.nextToken().trim()); // 新增trim()处理前置空格 type = SplitLine.nextToken().trim(); System.out.println(name + " " + cost + " " + type); } } catch (FileNotFoundException exception) { // 打印异常信息,方便定位问题 System.out.println("找不到Items.txt文件,请确认文件存放路径正确"); exception.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者Nitro
相关产品推荐
相关产品推荐

