为何将文件读取代码放入try/catch捕获FileNotFoundException后可正常运行?
为什么添加try/catch后Java文件读取代码能正常运行?
原代码的核心问题
原代码里的new Scanner(file)语句会抛出FileNotFoundException,这是Java的「受检异常」——这类异常要求开发者必须显式处理:要么在方法签名上声明throws FileNotFoundException,要么用try/catch块捕获。
原代码既没有捕获异常,也没有在readFile()方法上声明抛出该异常,所以代码连编译都无法通过,自然没法执行到读取文件的逻辑,你看到的「找不到文件」提示其实是编译错误,而非运行时的文件找不到。
修复后代码的作用
VSCode添加的try/catch(准确说是带资源的try-with-resources语句)解决了两个关键问题:
- 满足编译要求:通过
catch (FileNotFoundException e)捕获了受检异常,让代码能够正常编译,进而执行。 - 自动管理资源:
try (Scanner myReader = new Scanner(file))是Java的资源自动管理语法,执行完try块后会自动关闭Scanner,避免资源泄漏。
需要注意:添加try/catch本身并没有「让文件被找到」,它只是解决了编译问题,让代码能运行。如果你的文件路径确实正确,代码就能正常读取;如果路径仍有问题,catch块会打印异常堆栈信息,帮你排查真正的问题。
内容的提问来源于stack exchange,提问作者Vanni
相关产品推荐
相关产品推荐

