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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:36:04