java里面使用IO流(字节流,字符流)时对异常的几种处理方法

1.为什么要写处理异常?

我们之前只要是只用到IO流的时候为了方便,一般都直接把异常给throw出去了。但是这样做存在不妥当的地方,因为我们根本就没有处理异常 只是抛了出去。更加重要的就是有可能在我们释放资源之前程序就因为异常退出了,导致并没有释放资源

2.处理异常的几种方法

在这里插入图片描述
注意后面两个都是自动释放资源

3.代码演示三种方法

方法一 直接抛出异常等于没有处理 try…catch…finally

//这种方法抛出了异常 谁调用我社还要在再抛出异常

//我抛出了异常 谁调用我社还要在再抛出异常
    public  static  void method1() throws IOException {

        //实现使用字符流的便捷方法赋值一个字符文件
        FileReader fr = new FileReader("C:\\Users\\Administrator\\IdeaProjects\\Day07\\b.txt");

        FileWriter fw =  new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\Day07\\bbbb.txt");


        //一个字符数组一个字符书数组的读
        int len ;
        char chars[] = new char[1024];
        while ((len = fr.read(chars)) != -1){

            //复制文件
            fw.write(chars,0,len);

        }

        //释放资源
        fw.close();


    }

方法二 try…catch…finally

//这种方法使用try catch 进行处理了 谁调用我就不用再抛出异常了
//但是这样处理也太繁琐了 到处都是try catch

 //我使用try  catch 进行处理了 谁调用我就不用再抛出异常了
    //但是这样处理也太繁琐了  到处都是try catch
    public  static  void method2()  {


        FileReader fr = null;
        FileWriter fw = null;

        try {


            //实现使用字符流的便捷方法赋值一个字符文件
             fr = new FileReader("C:\\Users\\Administrator\\IdeaProjects\\Day07\\b.txt");
             fw =  new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\Day07\\bbbb.txt");


            //一个字符数组一个字符书数组的读
            int len ;
            char chars[] = new char[1024];
            while ((len = fr.read(chars)) != -1){

                //复制文件
                fw.write(chars,0,len);

            }

        }catch (Exception e){

        }finally {

            //判断对象是否为空 不为空的时候才释资源
            if (fr != null){
                try {
                    //释放资源
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fw != null){
                //释放资源
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

方法三 JDK 7 后提供的解决方法

//di第二种方法虽然对异常做了处理 但是太过于复杂
//JDK 7 以后又给出了一个解决方案

格式
try( 创建IO流对象 ){
可能出现细长的代码

}catch(异常类型 变量名){
异常的处理代码
}
这种法方式是自动释放资源

 //di第二种方法虽然对异常做了处理  但是太过于复杂
    //JDK 7 以后又给出了一个解决方案
    /*
        格式
        try(  创建IO流对象  ){
        可能出现细长的代码

        }catch(异常类型  变量名){
          异常的处理代码

        }

       这种法方式是自动释放资源

     */
    public static  void  method3(){

        try ( FileReader fr = new FileReader("C:\\Users\\Administrator\\IdeaProjects\\Day07\\b.txt");
              FileWriter fw = new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\Day07\\bbbb.txt");
              ){


            //一次读取一个字符数组
            int len ;
            char chars[] = new char[1024];
            while ((len = fr.read(chars)) != -1 ){

                fw.write(chars,0,len);

            }


        }catch (IOException exception){
            exception.printStackTrace();
        }

    }

方法四 JDK 9 后提供的解决方法

//第三种方法就已经很好了 但是JDK9以后有给出了别的解决方案

格式
定义输入流对象 ;
定义输出流对象 ;
try( 输入流对象名 ; 输出流对象名 ){

可能出现异常的代码
}catch(异常类型 异常对象){
异常的处理代码
}

//注意这种方式也是自动释放对象
//但是这种方法 还是要抛出异常 不太好 还是建议JDK7的解决方案



    public static  void  method4() throws IOException {

        FileReader fr = new FileReader("C:\\Users\\Administrator\\IdeaProjects\\Day07\\b.txt");
        FileWriter fw = new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\Day07\\bbbb.txt");

        try (fr ; fw){

            //一次读取一个字符数组
            int len ;
            char chars[] = new char[1024];
            while ((len = fr.read(chars)) != -1 ){

                fw.write(chars,0,len);

            }

        }catch (Exception e){
            e.printStackTrace();
        }



    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值