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编译器会自动帮你关闭资源比如文件流、通道等。让代码更简洁不容易忘记关资源。示例 CharsetcharsetCharset.forName(US-ASCII);StringsHello Java I/O!;PathfilePaths.get(output.txt);try(BufferedWriterwriterFiles.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 之前我们只能这样写CharsetcharsetCharset.forName(US-ASCII);StringsHello Old Java!;BufferedWriterwriternull;try{writerFiles.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 —— 更详细的异常信息除了通用的 IOExceptionJava 还提供了FileSystemException及其子类用来描述更具体的错误原因。 它提供了一些很有用的方法getFile()—— 出错的文件getReason()—— 出错的原因getOtherFile()—— 另一个涉及的文件比如重命名时的目标文件示例 try{Files.newBufferedReader(Paths.get(not_exists.txt));}catch(NoSuchFileExceptionx){System.err.format(文件不存在: %s%n,x.getFile());}输出可能是文件不存在:not_exists.txt5️⃣ 实战建议 写任何文件 I/O代码时一定要捕获并处理异常。优先用try-with-resources简洁又安全。如果需要更具体的信息比如哪个文件不存在可以使用FileSystemException子类。✅ 总结一句文件操作中异常处理和资源关闭是必修课谁忘了谁吃亏
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2563869.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!