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

无法修改主类时,如何解决FileNotFoundException未报告异常?

解决方法声明抛出异常但主类调用仍报错的问题

错误原因

你的addSongs方法签名里写了throws FileNotFoundException,但方法内部已经用catch块捕获了这个异常并返回false——这就产生了矛盾。编译器看到方法声明要抛出异常,就强制要求调用它的代码(也就是主类)必须捕获或者声明抛出该异常,但你又不能修改主类,所以才会触发这个编译错误。

修复步骤

1. 移除方法签名的异常声明

既然你已经在方法内部处理了FileNotFoundException(捕获后返回false),就不需要再在方法签名里声明抛出这个异常了。修改后的方法头部应该是:

public boolean addSongs(String fileName)

2. 优化循环逻辑(可选但更稳妥)

你原来用endFile标记结束循环的方式容易触发不必要的NoSuchElementException,建议改成用scan.hasNextLine()直接判断是否还有下一行,逻辑更清晰:

// 替换原来的while(!endFile)循环
while(scan.hasNextLine()) {
    try {
        String line = scan.nextLine();
        Scanner read = new Scanner(line);
        read.useDelimiter("/");
        
        String scannedName = read.next();           
        int scannedMin     = read.nextInt();
        int scannedSec     = read.nextInt();
        
        System.out.print("Name:    " + scannedName + "\n" +
                         "Minutes: " + scannedMin + "\n" +
                         "Seconds: " + scannedSec + 
                         "\n-----------------------------------\n");
        
        title.add(new Song(scannedName, scannedMin, scannedSec));
    } 
    catch(InputMismatchException e) {
        String error = scan.nextLine();
        System.out.print(" ERROR (cause): " + error + "\n");
    }
    // 移除原来的NoSuchElementException捕获,hasNextLine()会避免无元素的情况
}

这样修改后,方法既不会向外抛出异常,主类调用时也不会触发编译错误,同时循环逻辑更稳定可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:05