常规的标准方式
public static void main(String[] args) {
FileReader fileReader = null;
try {
fileReader = new FileReader("day16/student.txt");
int len = 0;
char[] ch = new char[1024];
while ((len = fileReader.read(ch)) != -1) {
System.out.println(new String(ch, 0, len));
}
//fileReader.close();
//一旦上面有任何地方出现异常,此处的close无法执行
//意味着流对象释放不掉,像这种本该释放掉的资源没有被正确释放 -- 称之为:内存泄漏
//内存泄漏最终会导致 内存溢出OOM
} catch (IOException e) {
e.printStackTrace();
} finally {
//防止流对象创建时失败,导致的空指针异常
try {
if (fileReader != null) { //防止流对象创建时失败,导致的空指针异常
fileReader.close();
fileReader = null; // 让堆里面的流对象,快速被垃圾回收机制回收 -- 提升内存利用率
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
JDK7的新特性方式
public static void main(String[] args) {
//这种资源释放的处理方式,要求资源对象对应的类,必须实现Closeable接口
//后期我们会遇到很多的资源对象,那么这些资源对象,不保证都实现了Closeable接口
try(FileReader fileReader = new FileReader("day16/student.txt")) {
int len = 0;
char[] ch = new char[1024];
while ((len = fileReader.read(ch)) != -1) {
System.out.println(new String(ch, 0, len));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}