如果你学习过异常处理与IO流,那么应该对try - catch - finally语句不陌生。try代码块用来放可能出现异常的代码,catch代码块用来处理异常,finally代码块用来结束流。代码实现也很简单,用第二十天视屏中介绍的标准复制语句即可。 public static void demo1() throws FileNotFoundException, IOException {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("xxx.txt");
fos = new FileOutputStream("yyy.txt");
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}
}finally {
try{
if(fis != null)
fis.close();
}finally { //try fianlly的嵌套目的是能关一个尽量关一个
if(fos != null)
fos.close();
}
}
}
但是这种方式书写的finally语句中仅仅是关流就用了整段代码的三分之一强,未免过于繁琐,好在JDK1.7中添加了一个新特性,叫做带参try语句(try with resource),能够在try - catch语句结束后自动关流,使用也很简单,将流对象的实例化当做参数传入try语句即可,第20天代码也有给出。
public static void demo2() throws FileNotFoundException, IOException {
try(
FileInputStream fis = new FileInputStream("xxx.txt");
FileOutputStream fos = new FileOutputStream("yyy.txt");
MyClose mc = new MyClose();
){
int b;
while((b = fis.read()) != -1) {
fos.write(b);
}
}
}
可以看到流对象并不是在try语句外实例化后再在try后的大括号内赋值,而是在try后的小括号内进行实例化并赋值;在使用完流对象后也没有手动关流,而程序依然能按照预期结果进行。以后使用这种方法就不用再在使用try方法操作io流时头疼如何关流了。
一点浅见,希望能够抛砖引玉 |
|