无法修改主类时,如何解决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
相关产品推荐
相关产品推荐

