Java读取txt文件报FileNotFoundException未处理异常问题咨询
问题描述
编写Java程序尝试读取txt文件,将文件内容加载到二维数组中打印,持续触发FileNotFoundException相关报错。已核查文件路径,分别尝试配置绝对路径、相对路径,报错始终未变,目标文件cars.txt存放在项目src文件夹下。
问题代码
public class Main { public static void main (String[] args) { Scanner input = new Scanner(System.in); Scanner gimmiethetxtplz = new Scanner(new File("cars.txt")); int rows = input.nextInt(); int columns = input.nextInt(); String[][] cars = new String[rows][columns]; for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { cars[i][j] = gimmiethetxtplz.nextLine(); System.out.print(cars[i][j] + " "); } System.out.println(); } input.close(); } }
抛出的异常信息
Exception in thread "main" java.lang.Error: Unresolved compilation problem: Unhandled exception type FileNotFoundException at training.Main.main(Main.java:9)
问题根因
这个报错不是运行时文件找不到导致的,是代码未通过编译的语法错误:FileNotFoundException属于Java的受检异常(Checked Exception),语法强制要求开发者必须显式处理这类异常,要么在方法签名上通过throws声明抛出,要么通过try-catch块捕获处理。当前代码没有做任何异常处理,编译器直接拦截报错,和你配置的文件路径是否正确没有关系。
就算解决了编译问题,当前代码还有两个隐藏问题:
- 文件路径配置错误:
new File("cars.txt")默认读取的是程序工作目录(通常是项目根目录,和src文件夹同级)下的文件,你把文件放在src文件夹下,运行时还是会找不到文件 - 输入流残留换行符:调用
input.nextInt()读取行列数后,输入缓冲区会残留回车符,后续调用nextLine()读取文件内容时会读到空字符串,导致二维数组数据错位。
修复步骤
- 解决编译期异常:简单测试场景下,直接在main方法上添加异常抛出声明即可,修改后方法签名为:
记得在文件头部补充缺失的导包语句:public static void main (String[] args) throws FileNotFoundException {import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; - 修正文件路径:要么把cars.txt从src文件夹移动到项目根目录,要么把文件路径修改为
"src/cars.txt"匹配当前存放位置 - 修复输入流错位问题:在读取完rows和columns两个整数后,添加一行
input.nextLine()消费掉缓冲区残留的换行符,避免后续读取内容为空。
内容的提问来源于stack exchange,提问作者Costantino Tessera
相关产品推荐
相关产品推荐

