IO异常的处理方式
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
try
{
FileWriter fw=new FileWriter("demo.txt"); //调用了Windows资源。
/*
凡是能和设备上的数据发生数据关系,能去处理的,都会发生IO异常。无论读、写或是创建。
*/
fw.write("abcdefg");
//如果分几句写几个try-catch的话,就没有意义了。所以将几句放在一起。
}
catch (IOException e)
{
System.out.println(e.toString());
}
/*关流是一定要执行的,所以可以放在finally中。*/
finally
{
fw.close();
}
}
}
写到这里,运行一下:
发现提示fw.close();找不到符号。
原因是:
现在总共有三个代码块,在try代码块中创建的对象,在finally中访问不到。
那可不可以将创建对象的语句写在try之前呢?
这是不可以的,因为当“new FileWriter(“demo.txt”)”出现,就会出现问题。因为它是抛异常。
应该:
在外边建立引用,在try内进行初始化
即:
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("demo.txt");
fw.write("abcdefg");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
fw.close();
}
}
}
这样,fw变量就作用于整个函数。
写到这里,再运行一下:
发现还是这一句"fw.close();"出现异常。
原因是:
原本三句话都发生了异常,而现在仅处理了两句,
所以,"fw.close();"需要单独try一下。
即:
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw=null;
try
{
fw=new FileWriter("demo.txt");
fw.write("abcdefg");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
此时,编译正确!
那如果“fw=new FileWriter(“demo.txt”); ”变为k盘下某个路径(不存在k盘)
他会报告两次异常
原因是:
1. 指定路径不存在
2. 此时,对象是否创建成功呢?
当然没有成功,因为初始化时抛出了异常,代表初始化失败,对象不存在。所以fw为空。
而到了finally中,fw为空,不能调用close
所以应该:
finally
{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
此时就只有找不到路径这一个异常了。需要使用者去解决一下。
以上就是一个标准的IO异常处理程序。
注意:finally中,一定要对关闭的流对象进行不等于空的判断