P35 IO异常的处理

系统:Win10
Java:1.8.0_333
IDEA:2020.3.4

1.JDK7 前处理

之前的入门练习,我们一直把异常抛出,而实际开发中并不能这样处理,建议使用 try…catch…finally 代码块,处理异常部分
代码使用演示

public class HandleException1 {
    public static void main(String[] args) {
        // 声明变量
        FileWriter fw = null;
        try {
            // 创建流对象
            fw = new FileWriter("a.txt");
            // 写出数据
            fw.write("学海无涯苦作舟");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw!=null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

2.JDK7 的处理(扩展知识点)

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

try (创建流对象语句,如果多个,使用';'隔开) {
    // 读写数据 
} catch (IOException e) {
    e.printStackTrace(); 
}
代码样式如下
public class HandleException2 {
    public static void main(String[] args) {
        // 创建流对象
        try (FileWriter fw = new FileWriter("b.txt")) {
            // 写出数据
            fw.write("书山有路勤为径");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.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(); 
        } 
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李晋江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值