在学习FileReader和BufferedReader后,老师写的一段代码如下:
FileReader fileRdr = null;
BufferedReader bufRdr = null;
try {
//打开文件读取流
fileRdr = new FileReader("F:\\demo.txt");
//使读取流使用缓冲技术
bufRdr = new BufferedReader(fileRdr);
String line = null;
//从缓冲区按行读取内容
while (null != (line = bufRdr.readLine())) {
System.out.println(line);
}
}
catch (FileNotFoundException e) {
System.out.println("file not found");
}
catch (IOException e) {
System.out.println("IOException");
}
finally {
try {
if (bufRdr != null) {
bufRdr.close();
}
}
catch (IOException e) {
System.out.println("BufferedReader close IOException" + e.getStackTrace());
}
}
FileReader创建读取流,BufferedReader给读取流加入缓冲区。然而,在读取完文件后只关闭了BufferedReader没有关闭FileReader,老师包括API文档解释是BufferedReader中close()会关闭流并释放资源,那么FileReader就会在BufferedReader关闭时关闭。不知道这样理解对否?
但是有个疑问假如在bufRdr = new BufferedReader(fileRdr);时出现异常bufRdr就会为null,那么代码最终会在finally中检测bufRdr为null就不会执行bufRdr.close();这时候执行fileRdr = new FileReader("F:\\demo.txt");时打开的读取流就没有被关闭,这个问题是怎么解决的呢?
|
|