黑马程序员技术交流社区
标题:
关于FileWriter的异常问题。
[打印本页]
作者:
刘源
时间:
2012-7-21 15:49
标题:
关于FileWriter的异常问题。
本帖最后由 刘源 于 2012-7-27 14:13 编辑
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw2 =null;
try
{
fw2 = new FileWriter("s:\\demo.txt");
fw2.write("LIUYUAN");
fw2.flush();
}
catch (IOException io)
{
System.out.println("new:::::::"+io.toString());
}
finally
{
try
{
//
if(fw2!=null)
fw2.close();
}
catch (IOException io)
{
System.out.println("close::::::"+io.toString());
}
}
}
}
此程序的异常是:
new:::::::java.io.FileNotFoundException: s:\demo.txt (系统找不到指定的路径。)
Exception in thread "main" java.lang.NullPointerException
at FileWriterDemo2.main(FileWriterDemo2.java:23)
去掉
//
的异常是:
newjava.io.FileNotFoundException: s:\demo.txt (系统找不到指定的路径。)
我的问题是:
第一个异常抛出是
fw2 = new FileWriter("s:\\demo.txt");
语句引起的,
还是fw2 = new FileWriter("s:\\demo.txt");和
fw2.close();
这2个语句同时引起的。
如果只是一个引起的,为什么加了
//if(fw2!=null)
后,异常结果变了。
如果是两个语句引起的,为什么
System.out.println("close::::::"+io.toString());
这个语句没有执行到。
作者:
王飞
时间:
2012-7-21 15:57
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw2 =null;
try
{
fw2 = new FileWriter("s:\\demo.txt");---
你有S盘???如果没有就是(系统找不到指定的路径。)
于是抛出异常,执行 :System.out.println("new:::::::"+io.toString());
下面的语句不会执行
fw2.write("LIUYUAN");
fw2.flush();
}
catch (IOException io)
{
System.out.println("new:::::::"+io.toString());
}
finally
{
try
{
//if(fw2!=null)
fw2.close();---
-此处由于fw2 = new FileWriter("s:\\demo.txt");没有执行成功,直接抛出异常了,所以此时的fw2还是null,所以调用fw2.close()时出错。
} ---因为fw2.close();是在try中的,所以没有关闭成功也会跑出一场,于是执行下面的catch
catch (IOException io)
{
System.out.println("close::::::"+io.toString());
}
}
}
}
作者:
刘源
时间:
2012-7-21 16:04
fw2.close();是在try中的,所以没有关闭成功也会跑出一场,于是执行下面的catch
就是因为没有执行才奇怪啊,你看我异常打印都没有"close::::::"这个东西。
作者:
李伟
时间:
2012-7-21 16:37
因为空指针异常不是IOException,所以finally里的catch语句里的IOException应该改成Exception
finally
{
try
{
//if(fw2!=null)
fw2.close();
}
catch (
Exception e
)
{
System.out.println("close::::::"+e.toString());
}
}
作者:
王宝康
时间:
2012-7-21 16:41
楼主,首先,第一个异常是因为你在一个不存在的地址上创建一个文件,会抛出异常;
其次,你的finally块中会产生异常,但是产生的是空指针异常,不是IO异常,你声明的是获取IO异常,所以获取不到IO异常,
System.out.println("close::::::"+io.toString());不会被执行,你可以直接写
catch(Exception e){
System.out.println("close::::::"+e.toString());
}
复制代码
这样就会出现你想要的结果了。
作者:
刘源
时间:
2012-7-21 17:02
哦,谢谢搞定了。
作者:
王璐
时间:
2012-7-21 17:17
11.png
(26.02 KB, 下载次数: 22)
下载附件
2012-7-21 17:12 上传
第一个异常是fw2 = new FileWriter("S:\\demo.txt"); 产生的,catch捕获后进行处理,程序
继续执行,执行到fw2.close(),因为这时fw2是null,调用close()方法,产生
java.lang.NullPointerException空指针异常。
当添加if(fw2!=null)语句后,有条件判断,fw2.close()并没有执行,也就不会产生空指针异常。
后面的catch没有捕获到异常,处理语句也就不会执行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2