当前位置: 首页 > news >正文

393. Java 文件操作基础 - 异常捕获与处理

文章目录

  • 393. Java 文件操作基础 - 异常捕获与处理
    • 1️⃣ IOException —— 文件 I/O 的“通用异常”
    • 2️⃣ try-with-resources —— 最推荐的写法 ✅
    • 3️⃣ 传统的 try-catch-finally 写法 ⚠️(不推荐)
    • 4️⃣ FileSystemException —— 更详细的异常信息
    • 5️⃣ 实战建议 🚀

393. Java 文件操作基础 - 异常捕获与处理

各位同学,写文件读文件时,异常(Exception)几乎是家常便饭。比如:

  • 预期存在的文件突然不见了 🗑️
  • 程序对某个目录没有访问权限 🚫
  • 底层文件系统不支持某个功能 ⚠️

所以,写文件 I/O 代码时,处理异常绝对不能省略


1️⃣ IOException —— 文件 I/O 的“通用异常”

几乎所有访问文件系统的方法都可能抛出IOException
👉 我们的代码必须对它进行处理,否则会直接报错并中断程序。


2️⃣ try-with-resources —— 最推荐的写法 ✅

Java SE 7开始,我们有了try-with-resources语法。
它的好处是:

  • 不用自己写 finally,编译器会自动帮你关闭资源(比如文件流、通道等)。
  • 让代码更简洁,不容易忘记关资源。

示例 👇

Charsetcharset=Charset.forName("US-ASCII");Strings="Hello Java I/O!";Pathfile=Paths.get("output.txt");try(BufferedWriterwriter=Files.newBufferedWriter(file,charset)){writer.write(s,0,s.length());}catch(IOExceptionx){System.err.format("IOException: %s%n",x);}

🔎 解读:

  • try (BufferedWriter writer = ...)表示创建了一个自动关闭的资源。
  • 不管代码是正常结束,还是catch了异常,writer.close()都会被自动调用
  • 这是最推荐的写法,简洁 + 安全

3️⃣ 传统的 try-catch-finally 写法 ⚠️(不推荐)

在 Java 7 之前,我们只能这样写:

Charsetcharset=Charset.forName("US-ASCII");Strings="Hello Old Java!";BufferedWriterwriter=null;try{writer=Files.newBufferedWriter(Paths.get("output.txt"),charset);writer.write(s,0,s.length());}catch(IOExceptionx){System.err.format("IOException: %s%n",x);}finally{try{if(writer!=null)writer.close();}catch(IOExceptionx){System.err.format("IOException when closing: %s%n",x);}}

🔎 解读:

  • 必须在 finally 里手动关闭资源
  • 如果忘记关,程序可能会占用文件不释放,导致崩溃。
  • 看起来更麻烦,现在基本只用于老项目。

4️⃣ FileSystemException —— 更详细的异常信息

除了通用的 IOException,Java 还提供了FileSystemException及其子类,用来描述更具体的错误原因。

👉 它提供了一些很有用的方法:

  • getFile()—— 出错的文件
  • getReason()—— 出错的原因
  • getOtherFile()—— 另一个涉及的文件(比如重命名时的目标文件)

示例 👇

try{Files.newBufferedReader(Paths.get("not_exists.txt"));}catch(NoSuchFileExceptionx){System.err.format("文件不存在: %s%n",x.getFile());}

输出可能是:

文件不存在:not_exists.txt

5️⃣ 实战建议 🚀

  • 任何文件 I/O代码时,一定要捕获并处理异常
  • 优先用try-with-resources,简洁又安全。
  • 如果需要更具体的信息,比如哪个文件不存在,可以使用FileSystemException子类。

✅ 总结一句:
文件操作中,异常处理和资源关闭是必修课,谁忘了谁吃亏!

http://www.jsqmd.com/news/716320/

相关文章:

  • 从‘永恒之蓝’到‘零日星期三’:给开发者的5个安全编码习惯,从源头减少漏洞
  • 用Go工具sv备份AI编程助手配置:从原理到实践
  • 如何快速扩展Windows虚拟显示器:终极完整指南
  • CTF新手必看:手把手教你用Python分解大整数,搞定那道经典的Alice与Bob题
  • SDCC编译的Hex文件太大?手把手教你优化51单片机代码体积(对比Keil C51实战)
  • 2000-2024年上市公司产学研合作(UIC)数据
  • unrpa终极指南:解密Ren‘Py游戏资源提取的完整解决方案
  • 从MobileNet到MobileViTv3:手把手教你为移动端部署选择最合适的轻量级视觉模型
  • GBFR Logs:碧蓝幻想Relink玩家的终极DPS监控与数据分析工具
  • Spring Boot + MyBatis项目里,那个烦人的‘SqlSession was not registered for synchronization’警告到底要不要管?
  • 扩散模型的兴起
  • 2002-2025年中债国债到期收益率
  • 抖音无水印下载工具:简单三步获取高清无水印视频
  • 终极指南:快速掌握Dlib Windows预编译包的核心技巧
  • WindowsCleaner:你的Windows系统健康管家,告别C盘爆红烦恼
  • STM32H743外挂W5500做UDP通信,一个Socket端口如何同时处理多个客户端数据?
  • Flux2-Klein-9B-True-V2效果展示:运动模糊与动态抓拍效果模拟
  • X-Scan在Windows 10/11上的那些“坑”:从WinPcap驱动安装到NMAP报错全解决
  • LayerDivider终极指南:免费AI智能分层工具彻底改变数字艺术创作流程
  • 2001-2025.12中国城市空气质量每日数据、良好天数
  • 告别环境配置噩梦:手把手教你用Eclipse+MSYS2搞定Ai-WB2开发环境(附SDK下载)
  • 前端性能分析工具
  • 告别臃肿!从Anaconda迁移到Miniconda的保姆级卸载与安装指南(附JupyterLab配置)
  • 1980年-2024年各县区逐日相对湿度、比湿、地表高度、气压、风速和气温数据
  • 如何在安卓上快速配置虚拟摄像头:VCAM完整使用指南
  • 避开蓝桥杯单片机常见坑:从按键消抖到窗口切换的实战调试记录(国信天长开发板)
  • COMSOL方形锂电池电化学-热耦合模型充放电循环仿真研究:三种模型,含一维电化学与三维方形铝...
  • 终极指南:3分钟掌握Zotero插件市场,一键安装所有必备插件
  • 静驭山河,力顺无界 | 盖茨 Belt Drive 亮相中国国际自行车展,开启骑行传动新体验
  • ES8311音频Codec调试避坑指南:从ID读取失败到回环测试无声的常见问题排查