IO异常处理

之前我们写代码的时候都是直接抛出异常,但是我们试想一下,如果我们打开了一个流,在关闭之前程序抛出了异常,那我们还怎么关闭呢?这个时候我们就要用到异常处理了。
try-with-resource语句: 确保在异常出现后 打开的流能自动关闭,无需单独再写.close()流关闭语句。
语法:
try(构建流通道语句){
  业务处理逻辑
}catch(异常){
  异常处理逻辑
}finally{
  ....
}
 
示例代码:
import java.io.*;
import java.nio.charset.Charset; /**
* @ClassName FileCopyTryCatchExample
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/17.
*/
public class FileCopyTryCatchExample {
public static void main(String[] args){
String srcPath = "C:\\Users\\ZHANGMINGDA\\Pictures\\康熙北巡.jpg";
String dstpath = "C:\\Users\\ZHANGMINGDA\\Pictures\\康熙北巡bak.jpg";
char[] tmpchars = new char[1024];
int readLength; // try(Reader fileReader = new FileReader(srcPath); Writer fileWriter = new FileWriter(dstpath)){
try(Reader fileReader = new MyFileReader(srcPath); Writer fileWriter = new MyFileWriter(dstpath)){
while ((readLength = fileReader.read(tmpchars)) != -1){
fileWriter.write(tmpchars,0,readLength);
}
// fileReader.close();
// fileWriter.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
System.out.println("done");
}
}

//测试try(构建流)语句是否自动关闭流,重写FileReader和FileWriter
public static class MyFileReader extends FileReader{ public MyFileReader(String fileName) throws FileNotFoundException {
super(fileName);
} public MyFileReader(File file) throws FileNotFoundException {
super(file);
} public MyFileReader(FileDescriptor fd) {
super(fd);
} public MyFileReader(String fileName, Charset charset) throws IOException {
super(fileName, charset);
} public MyFileReader(File file, Charset charset) throws IOException {
super(file, charset);
} @Override
public void close() throws IOException {
super.close();
System.out.println("关闭了输入流");
}
} public static class MyFileWriter extends FileWriter { public MyFileWriter(String fileName) throws IOException {
super(fileName);
} public MyFileWriter(String fileName, boolean append) throws IOException {
super(fileName, append);
} public MyFileWriter(File file) throws IOException {
super(file);
} public MyFileWriter(File file, boolean append) throws IOException {
super(file, append);
} public MyFileWriter(FileDescriptor fd) {
super(fd);
} public MyFileWriter(String fileName, Charset charset) throws IOException {
super(fileName, charset);
} public MyFileWriter(String fileName, Charset charset, boolean append) throws IOException {
super(fileName, charset, append);
} public MyFileWriter(File file, Charset charset) throws IOException {
super(file, charset);
} public MyFileWriter(File file, Charset charset, boolean append) throws IOException {
super(file, charset, append);
} @Override
public void close() throws IOException {
super.close();
System.out.println("关闭了输出流");
}
}
}

最新文章

  1. Linux可信计算机制模块详细分析之核心文件分析(8)tpm.c核心代码注释(中)
  2. 有了lisk,为什么我们还要做一个Asch?
  3. 开源实时日志分析ELK平台部署
  4. Dynamic CRM2016在一台本地服务器安装部署
  5. Autosizer应用程序窗口控制工具
  6. iOS多线程邂逅
  7. 使用 Microsoft Word 发布博客文章
  8. 如何使用NET Reactor为您的.Net(C#,VB.Net) 源代码加密
  9. mvc验证码
  10. 转载:深入探讨 Java 类加载器
  11. GDB调试工具入门
  12. MySQL的4种事务隔离级别
  13. spring 排除指定的类或者包扫描
  14. 第四次oo博客
  15. 常用git命令总结 初始化git库操作 git 子模块
  16. 在ASP.NET MVC中使用Area区域
  17. Spark集群的任务提交执行流程
  18. android measure的时候报空指针
  19. 响应式 Web 设计指南「实践篇」
  20. GoJS拖动设计

热门文章

  1. 解决FastJson中"$ref重复引用"的问题方法
  2. myeclipse激活教程
  3. 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD
  4. R语言与医学统计图形-【32】海盗图、词云图、日历图
  5. C语言 序列反向互补函数
  6. 48-Merge Sorted Array
  7. SQL-用到的数据库语句总结
  8. nginx二级域名指向不同文件项目配置
  9. Spark基础:(五)Spark编程进阶
  10. 商业爬虫学习笔记day7-------解析方法之bs4