• IO异常的处理


    IO异常的处理

    JDK7前处理

    使用try catch finally 处理流中的异常

    格式:

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

    示例代码:

    public static void main(String[] args) {
            // 提高变量fw的作用域,让finally可以使用
            // 变量在定义的时候,可以没有值,但是使用的时候必须有值
            // fw = new FileWriter("Q:\Test\e.txt");执行失败,fw没有值,fw.close会报错
            FileWriter fw = null;
            try {
                // 可能会产生异常的代码
                fw = new FileWriter("D:\Test\e.txt");
                for (int i = 1;i<10;i++){
                    fw.write("HelloWorld"+i+"
    ");
                }
            }catch (IOException e){
                // 异常的处理逻辑
                System.out.println(e);
            }finally {
                // 一定会执行的代码
                // 创建对象失败了,fw的默认值是null,null是不能调用方法的,会抛出NullPointerException,需要增加一个判断,不是null在释放资源
                if(fw!=null){
                    try {
                        fw.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    

    JDK7的处理(扩展知识点了解内容)

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

    JDK7的新特性

    在try的后边可以增加一个(),在括号中可以定义流对象

    那么这个流对象就在try中有效

    try中的代码执行完毕,会自动释放流对象,不用写finally

    格式:

    try (定义流对象;定义流对象  如果多个,使用';'隔开) {
    	可能会产生异常的代码
    } catch (异常类变量  变量名) {
    	异常的处理逻辑
    }
    

    示例代码

    public static void main(String[] args) {
            try (
                    // 1.创建一个字节输入流对象,构造方法中绑定要读取的数据源
                    FileInputStream fis = new FileInputStream("c:\Test\1.jpg");
                    // 2.创建一个字节输入流对象,构造方法中绑定要写入的目的地
                    FileOutputStream fos = new FileOutputStream("d:\Test\1.jpg");
                    ){
                // 可能会产生异常的代码
                // 一次读取一个字节写入一个字节的方式
                // 3.使用字节输入流对象中的方法read读取文件
                int len = 0;
                while ((len = fis.read())!=-1){
                    // 4.使用文件字节输出流中的方法write,把读取到的文件写入目的地
                    fos.write(len);
                }
            }catch (IOException e){
                System.out.println(e);
            }
    }
    

    JDK9的改进(扩展知识点了解内容)

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

    改进前格式:

    // 被final修饰的对象
    final Resource resource1 = new Resource("resource1");
    // 普通对象
    Resource resource2 = new Resource("resource2");
    // 引入方式:创建新的变量保存
    try (Resource r1 = resource1;
         Resource r2 = resource2) {
         // 使用对象
    }
    

    改进后格式:

    // 被final修饰的对象
    final Resource resource1 = new Resource("resource1");
    // 普通对象
    Resource resource2 = new Resource("resource2");
    
    // 引入方式:直接引入
    try (resource1; resource2) {
         // 使用对象
    }
    

    改进后,代码使用演示:

    public class TryDemo {
        public static void main(String[] args) throws IOException {
           	// 创建流对象
            final  FileReader fr  = new FileReader("in.txt");
            FileWriter fw = new FileWriter("out.txt");
           	// 引入到try中
            try (fr; fw) {
              	// 定义变量
                int b;
              	// 读取数据
              	while ((b = fr.read())!=-1) {
                	// 写出数据
                	fw.write(b);
              	}
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

  • 相关阅读:
    没吃过猪肉,却想见识下猪跑
    程序员修电脑
    csdn 新排名系统参考的部分指标
    如何快速适应新工作
    前端学习指北
    公号文章整理
    BUI 视频,音频在线播放
    原生图片上传,图片格式和图片大小处理
    获取路由拼接参数
    Axure RP9调用后端接口操作步骤
  • 原文地址:https://www.cnblogs.com/anke-z/p/12682937.html
Copyright © 2020-2023  润新知