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();
}
}
}