Java基础IO读取与写入流问题?

importjava.io.*;/**字符流复制文本文件*带上异常*读字符,写字符*/publicclassFileCopyDemo{publicstaticvoidma... import java.io.*;
/*
* 字符流复制文本文件
* 带上异常
* 读字符,写字符
*/
public class FileCopyDemo {

public static void main(String[] args) {
long s = System.currentTimeMillis();
//声明两个流对象
FileReader fileReader = null;
FileWriter fileWriter = null;
try {
//创建两个流对象
fileReader = new FileReader("read.txt");
fileWriter = new FileWriter("copy.txt",true);
//开始循环读取数据源,一个字符
int length = 0;
while ((length = fileReader.read()) != -1) {
fileWriter.write(length);
fileWriter.flush();
}
}catch(IOException e) {
e.printStackTrace();
throw new RuntimeException("文件复制失败异常");
}finally {
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
throw new RuntimeException("写入目的资源关闭失败异常");
}finally {
try {
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
throw new RuntimeException("读取数据源资源关闭异常");
}
}
}
long e = System.currentTimeMillis();
System.out.println(e - s);
}
}

在关闭写入与读取流的时候,为什么判断fileReader != null才关闭,什么意思?
展开
 我来答
Apple林
2014-11-13 · TA获得超过2093个赞
知道小有建树答主
回答量:895
采纳率:66%
帮助的人:551万
展开全部
首先你要明白,try catch和finally的关系,
如果 fileReader = new FileReader异常,catch里面会抛出IOException,但是此时finally里面的代码还是会执行。
所以如果你fileReader = new FileReader异常,导致没有这个对象,那么finally里面
fileReader.close();
会导致不存在的文件流关闭,所以事先判断,避免出现这个错误。
追问
这跟“判断数据读完没有”没有关系是吧
追答
fileReader = new FileReader("read.txt");你这行代码如果read.txt不存在,这个对象是不是创建失败了?
接下来你程序的catch会抛出IOException;然后程序继续执行finally里面的语句,
你对一个 null对象 执行fileReader.close();
肯定会出错啊!
百度网友28b5a18
2014-11-13 · 超过26用户采纳过TA的回答
知道答主
回答量:143
采纳率:0%
帮助的人:75.6万
展开全部
fileReader = new FileReader("read.txt"); 如果在读取文件是就发生异常 入FileNotFound ,此时程序会运行到finally ,而fileReader 为null,直接掉close()又会抛异常,所以进行判断,也就是代码的严谨性,以上代码外层又加了try catch不判断问题也不是很大
追问
是不是意思是如果fileReader 为null时关闭,会有异常抛出,fileReader 为null就说明没有走创建两个流对象,所以读取文件流没有指向,就有异常。
而fileReader != null
,就是说走创建两个流对象了,程序是正常运行的,而下面的fileReader.close();
也是正常关闭。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不留小辫的艺术家3F
2014-11-13 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:70.7万
展开全部
判断数据读完没有吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式