关于java IO流异常抛出问题,跪求Java大神回答(我在线可以马上给分)

packagea.b;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.IOExc... package a.b;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.RandomAccessFile;
publicclass Test3 {
publicstaticvoid main(String[] args) throws IOException {
File f = new File("config");
RandomAccessFile raf = new RandomAccessFile(f, "rw");
int count = 0;
try {
count = raf.readInt(); // 如果没有读取到信息,那么会产生异常
if (count < 5) {
count++;
System.out.println("当前是第" + count + "次试用");
raf.seek(0);
raf.writeInt(count);
} else {
System.out.println("试用次数已经结束");
}
} catch (IOException e) {
raf.writeInt(1);
System.out.println("当前是第" + 1 + "次试用");
}
}
}
上面readInt()方法如果没有读取到信息,那么会产生异常。
那么为什么下面read()方法如果没有读取到信息,也不产生异常?那么下面read()方法什么时候才会产生IO异常呢?(跪求java大神高手请问答这两个问号)
package a.b;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.IOException;
publicclass B {
publicstaticvoid main(String[] args) {
FileReader fr=null;
try {
fr = new FileReader("c.txt");
} catch (FileNotFoundException e) {
System.out.println(88);
}
int a=0;
try {
fr.close();
a= fr.read();//为什么这里read()方法如果没有读取到信息,也不产生异常?
System.out.println(123);
System.out.println((char)a);
} catch (IOException e) {
System.out.println(456);
}
}
}
到目前为止下面所有回答都偏离我想要的答案
第一:我明白readint()在上面代码会产生异常,这个没得解释的,老师笔记就是这样描述的,至于为什么会产生就不用研究到底了这个1+1为什么等于二道理一样吧(还有上面第一个代码我完全理解,不要纠缠第一个代码了,写第一个代码出来是为了和下面那个代码中的read()做个对比而已)
我之前用read()方法都是将异常throws出去的 现在我需要在异常产生情况下分别在try块和catch块都相应执行一些自定义操作-----------因为不太了解read()什么时候会抛出异常,查了API的read()方法也没怎么描述,看了API---IOException这个类也没有我想要的答案,到目前为止百度了一个答案就是-----------如果read()方法前不小心把流关闭了就会产生异常(现在我想知道read()方法在什么时候会有异常产生)
展开
 我来答
小锄头andrew
2014-09-16 · TA获得超过627个赞
小锄头andrew
采纳数:224 获赞数:627

向TA提问 私信TA
展开全部

如图所示,第一次因为你的文件内容是空的,已经达到末尾了,所以catch到的异常是EOFException,如下所示:

 

 

同学,好好看看API文档:

 

readInt当文件达到末尾的时候会抛出EOFException,而第一次你调用readInt文件肯定是在末尾,所以抛出了异常,而不是1+1等于2的道理。

追问
不要研究readInt()方法,
read()方法呢?
f2316056859
2014-09-16 · TA获得超过121个赞
知道小有建树答主
回答量:124
采纳率:100%
帮助的人:60.2万
展开全部
你将捕获的异常输出来就会看到异常信息了,而不是简单的System.out.println(456);
更多追问追答
追问
我那System.out.println(456);是为了测试是否产生异常    我都不知道什么情况下才产生异常   何来捕获    到目前为止我i只知道在read()方法前面把流关闭了就会产生异常   除了这种           read()方法什么情况下会产生异常
追答
你确定new FileReader("c.txt");对吗?连盘符都没有。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式