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才关闭,什么意思? 展开
/*
* 字符流复制文本文件
* 带上异常
* 读字符,写字符
*/
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才关闭,什么意思? 展开
展开全部
首先你要明白,try catch和finally的关系,
如果 fileReader = new FileReader异常,catch里面会抛出IOException,但是此时finally里面的代码还是会执行。
所以如果你fileReader = new FileReader异常,导致没有这个对象,那么finally里面
fileReader.close();
会导致不存在的文件流关闭,所以事先判断,避免出现这个错误。
如果 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();
肯定会出错啊!
展开全部
fileReader = new FileReader("read.txt"); 如果在读取文件是就发生异常 入FileNotFound ,此时程序会运行到finally ,而fileReader 为null,直接掉close()又会抛异常,所以进行判断,也就是代码的严谨性,以上代码外层又加了try catch不判断问题也不是很大
追问
是不是意思是如果fileReader 为null时关闭,会有异常抛出,fileReader 为null就说明没有走创建两个流对象,所以读取文件流没有指向,就有异常。
而fileReader != null
,就是说走创建两个流对象了,程序是正常运行的,而下面的fileReader.close();
也是正常关闭。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
判断数据读完没有吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询