zoukankan      html  css  js  c++  java
  • Java 之 IO 异常的处理【了解】

    一、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+"
    ");
    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     }

     

  • 相关阅读:
    Java中的equals方法和==的区别
    C语言学习笔记--单向链表Markdown版本
    Tamias Blog's
    nginx图片服务器
    Nginx安装解决报错
    Detour框架注入样本无法正常启动(0x000007b)
    结构体指针中包含结构体指针
    Linux开发准备:Ubuntu14.04+Samba+MobaXterm+Source Insight 4.0
    在Visual Studio中将dll以资源的形式嵌入exe中
    MACD的价值不在于“金叉死叉”而在于背离
  • 原文地址:https://www.cnblogs.com/niujifei/p/11491359.html
Copyright © 2011-2022 走看看