当前位置 > it书童 > java > 正文
推荐小册
Java的Lambda表达式
Java的Lambda表达式

聊聊jvm
jvm调优

java异常处理
java异常处理机制

java拾遗
java知识点,java面试题

java多线程
java多线程入门

学习spring源码
如何阅读spring源码

仿 spring 自制框架
造轮子,模仿 spring 自制一个框架

SpringCloud
SpringCloud微服务入门

微服务商城
使用微服务搭建一个电商项目

SpringBoot
SpringBoot入门学习,SpringBoot是什么

Java 对IO异常的处理

java it书童 2020-08-12 11:46:40 0赞 0踩 109阅读 0评论

实际开发中并不能这样处理,要使用 try...catch...finally 代码块,处理异常部分。不同版本的 jdk 对不同 IO 异常处理方式不同

JDK7前处理

public static void main(String[] args) {
    // 声明变量
    FileWriter fw = null;
    try {
        //创建流对象
        fw = new FileWriter("fw.txt");
        // 写出数据
        fw.write("目成心许");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fw != null) {
                fw.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JDK7的处理

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

格式:

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

代码使用演示:

public static void main(String[] args) {
    // 创建流对象
    try ( FileWriter fw = new FileWriter("fw.txt"); ) {
        // 写出数据
        fw.write("目成心许");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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 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();
    }
}
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
转载须注明出处:https://www.itshutong.com/articles/598/javas-handling-of-io-exception