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

PrintWriter仅写入文本文件首行,finally块已关流仍异常如何解决?

故障原因分析
  • 异常被静默吞噬,循环提前终止:代码中的catch块为空实现,没有任何日志打印或异常抛出逻辑,只要while循环内部出现任何异常,会直接跳出循环进入finally块,此时仅完成了第一行数据的读取和写入,后续行都未处理,这是仅输出第一行的直接原因。
  • Scanner分隔符适配错误,换行符匹配失败:你设置的分隔符为[/\n],仅能匹配/和\n两种字符,但Windows系统下文本文件的换行符为\r\n,第一行末尾的\r没有被识别为分隔符,会被当做下一个token的内容,此时调用Sc1.nextInt()读取第二行的dbcuid时,拿到的是带\r的非数字字符串,直接抛出InputMismatchException触发循环终止。这也符合你提到的「未做明显修改突然出现问题」的特征:大概率是Centre.txt文件被在Windows系统下编辑过,换行符从\n变为了\r\n,触发了该适配问题。
修复方案
  • 修改Scanner分隔符为[/\\r?\\n],兼容Windows、Linux、macOS多系统的换行格式,也可以用"[/\\n]+"匹配连续分隔符,避免空token干扰读取逻辑。
  • 移除空的catch块,要么向上抛出异常,要么添加e.printStackTrace()打印异常栈,禁止静默吞噬异常,否则会大幅提升问题排查难度。
  • 简化资源关闭逻辑:调用pw1.close()时会自动关闭它包装的BufferedWriter和FileWriter,不需要重复手动关闭内层流,避免重复关闭导致的异常。
  • 初始化FileWriter时移除追加模式参数true,每次生成Temp.txt应当是全新内容,避免旧文件残留内容干扰最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:04