You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
2.4 KiB
45 lines
2.4 KiB
使用豆包与通义灵码;
|
|
|
|
代码说明
|
|
1.try-with-resources:BufferedReader 会在 try 代码块结束后自动关闭,不用手动写 br.close(),更安全。
|
|
2.双重异常处理:
|
|
外层 catch (IOException e):处理文件不存在、读取出错的情况。
|
|
内层 catch (NumberFormatException e):处理文件里有非数字内容的情况(比如不小心写了字母),不会让整个程序崩溃。
|
|
|
|
|
|
1.什么是try-with-resource?
|
|
区别:只是在 try 后面的括号 () 中声明了资源。
|
|
eg. try (BufferedReader reader = new BufferedReader(new FileReader("score.txt"))) {
|
|
优点:会自动关闭文件
|
|
|
|
2.为什么reader会报错?
|
|
变量作用域规则:在 try(...) 括号内声明的变量,只能在 try-catch 块内部使用。
|
|
try (BufferedReader reader = ...) { ← reader 从这里开始存在
|
|
// reader 可以使用 ✅
|
|
} catch (IOException e) {
|
|
// reader 可以使用 ✅
|
|
} ← reader 在这里被自动关闭并销毁
|
|
|
|
reader.close(); ← reader 已经不存在了 ❌
|
|
|
|
3.创建的Scores.txt文件应该放在哪里?
|
|
|
|
代码里写的 new FileReader("scores.txt"),是相对路径,它的默认查找位置是:
|
|
项目编译后,class 文件运行的根目录
|
|
对于你的项目结构来说,就是 Test/out/production/Test 这个目录
|
|
如果把文件放在 src/W7/ 里,运行时就找不到了,因为程序会在根目录找,而不是在 W7 包里找。
|
|
|
|
4.. 为什么 “裸奔版” 代码里这么写会有问题?
|
|
没有异常处理:如果文件不存在、读取出错,程序会直接崩溃。
|
|
没有自动关闭流:如果程序中途出错,br.close() 可能执行不到,会导致文件资源泄漏。
|
|
没有数字格式校验:如果文件里有非数字内容,Integer.parseInt(line) 会直接报错。
|
|
|
|
5.裸奔代码每一行表示的意义
|
|
代码行 核心作用 问题
|
|
BufferedReader br = ... 打开 scores.txt 并创建带缓冲的读取器 无异常处理,文件不存在直接崩溃
|
|
String line; 声明变量存每行内容 无问题,但无实际防护
|
|
while ((line = br.readLine()) != null) 循环读取文件每一行 无异常处理,读取失败直接崩溃
|
|
sum += Integer.parseInt(line); 转数字并累加总分 无格式校验,非数字内容直接崩溃
|
|
br.close(); 关闭文件释放资源 中途报错则执行不到,导致资源泄漏
|
|
|
|
|
|
|