Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 272|回复: 0

Java 之 IO 异常的处理【了解】

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-6-19 08:53:32 | 显示全部楼层 |阅读模式

    一、JDK7 前的处理

      前面的 Demo 中,一直把异常抛出,而在实际中并不能这样处理,建议使用 try...catch...finally 代码块,处理异常部分。

      格式

    try{
        可能会产出异常的代码
    }catch(异常类变量 变量名){
        异常的处理逻辑
    }finally{
         一定会指定的代码
         资源释放
    }

      Demo:

     1  public static void main(String[] args) {  2         //提高变量fw的作用域,让finally可以使用  3         //变量在定义的时候,可以没有值,但是使用的时候必须有值  4         //fw = new FileWriter("E:\\g.txt",true); 执行失败,fw没有值,fw.close会报错
     5         FileWriter fw = null;  6         try{  7             //可能会产出异常的代码
     8             fw = new FileWriter("w:\\aaa\\g.txt",true);  9             for (int i = 0; i <10 ; i++) { 10                 fw.write("HelloWorld"+i+"\r\n"); 11  } 12         }catch(IOException e){ 13             //异常的处理逻辑
    14  System.out.println(e); 15         }finally { 16             //一定会指定的代码 17             //创建对象失败了,fw的默认值就是null,null是不能调用方法的,会抛出NullPointerException,需要增加一个判断,不是null在把资源释放
    18             if(fw!=null){ 19                 try { 20                     //fw.close方法声明抛出了IOException异常对象,所以我们就的处理这个异常对象,要么throws,要么try catch
    21  fw.close(); 22                 } catch (IOException e) { 23  e.printStackTrace(); 24  } 25  } 26 
    27  } 28     }

    二、JDK7 的处理的(了解)

      还可以使用JDK7优化后的 try-with-resource 语句,它是为资源关闭专门设计的try...catch的语法,该语句确保了每个资源在语句结束时关闭。所谓的资源(resource)是指在程序完成后,必须关闭的对象。

      格式

    1 try (创建流对象语句,如果多个,使用';'隔开) { 2   // 读写数据
    3 } catch (IOException e) { 4  .printStackTrace(); 5 }

     

      Demo:

     1 public static void main(String[] args) {  2         try(//1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
     3             FileInputStream fis = new FileInputStream("c:\\1.jpg");  4             //2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
     5             FileOutputStream fos = new FileOutputStream("d:\\1.jpg");){  6 
     7             //可能会产出异常的代码  8             //一次读取一个字节写入一个字节的方式  9             //3.使用字节输入流对象中的方法read读取文件
    10             int len = 0; 11             while((len = fis.read())!=-1){ 12                 //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
    13  fos.write(len); 14  } 15 
    16         }catch (IOException e){ 17             //异常的处理逻辑
    18  System.out.println(e); 19  } 20 
    21 
    22     }

     

    三、JDK9 的改进(了解)

      JDK9try-with-resource 的改进,对于引入对象的方式,支持的更加简洁。被引入的对象,同样可以自动关闭,无需手动close,我们来了解一下格式。

      try的前边可以定义流对象,在try后边的()中可以直接引入流对象的名称(变量名),在try代码执行完毕之后,流对象也可以释放掉,不用写finally。

      格式

    1         A a = new A(); 2         B b = new B(); 3         try(a,b){ 4  可能会产出异常的代码 5         }catch(异常类变量 变量名){ 6  异常的处理逻辑 7         }

     

      Demo:

     1 public static void main(String[] args) throws IOException {  2         //1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
     3         FileInputStream fis = new FileInputStream("c:\\1.jpg");  4         //2.创建一个字节输出流对象,构造方法中绑定要写入的目的地
     5         FileOutputStream fos = new FileOutputStream("d:\\1.jpg");  6 
     7         try(fis;fos){  8             //一次读取一个字节写入一个字节的方式  9             //3.使用字节输入流对象中的方法read读取文件
    10             int len = 0; 11             while((len = fis.read())!=-1){ 12                 //4.使用字节输出流中的方法write,把读取到的字节写入到目的地的文件中
    13  fos.write(len); 14  } 15         }catch (IOException e){ 16  System.out.println(e); 17  } 18 
    19         //fos.write(1);//Stream Closed 此时流已经关闭了
    20 
    21     }

     

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-9 23:17 , Processed in 1.148173 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表