java中流的异常处理方式
public static void main(String[] args) {
Reader r=null;
try{
r=new FileReader("d:/touhou.txt");
int i=r.read();
System.out.println(i);
} catch (Exception e) {
System.err.println("读取文件出现异常");
}finally {
try {
r.close();
} catch (Exception e) {
System.err.println("输入流关闭异常");
}
}
System.out.println("程序执行完毕");
}
1.首先是传统的方法:用try,catch方法捕获异常:
将字符输入流Reader初始化为null,再用try包裹操作流的代码,catch捕获可能出现的异常(为了能捕获所有的异常,参数为Exception,也就是所有异常的父类);
在操作完成后,无论读取文件是否出现异常,都需要关闭流,所以需要在finally里写上关闭流的语句;
注:finally在try.catch语句中,无论有没有捕获到异常,都会在最后执行,即使在这之前使用return返回当前方法,finally依旧会执行;
由于关闭流的过程中,可能会出现例如空指针这样的异常,所以关闭流的代码也需要try.catch捕获;
当能正常读取文件时,控制台输出:
65533
程序执行完毕
当文件不存在,读取文件出现异常时,控制台输出:
读取文件出现异常
输入流关闭异常
程序执行完毕
使用try.catch捕获可能出现的异常,就不会影响后续代码的执行;
2.jdk7之后新增的方法,无需手动关闭
public static void main(String[] args) {
try(Reader r=new FileReader("d:/touhou.txt")){
int i=r.read();
System.out.println(i);
} catch (Exception e) {
System.err.println("读取文件出现异常");
}
System.out.println("程序执行完毕");
}
在try( )里定义和初始化流对象,不需要调用close()方法就能自动关闭流,同时,关闭流对象时可能产生的异常也会自动帮你处理;