之前的复制文件的异常都用的throws,但是try...catch...finally才是正途。如果按照流程,我以之前的一段代码为例,异常处理后它应该长这样:
import java.io.*;
public class copy {
public static void main(String[] args){
BufferedReader br=null;
BufferedWriter bw=null;
try {
br=new BufferedReader(new FileReader("C:\\data\\将进酒.txt"));
bw=new BufferedWriter(new FileWriter("C:\\data\\buffercopy.txt"));
char[] c=new char[1024];
int len;
while((len=br.read(c))!=-1){
bw.write(c,0,len);
}
}catch (IOException e){
e.printStackTrace();
}finally {
if(bw!=null){
try {
bw.close();
}catch (IOException e){
e.printStackTrace();
}
}
if(bw!=null){
try {
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
}
有点麻烦,jdk7以后有了新的解决方案,这个方案就稍微好点了,因为它会自动释放资源,所以finally那一堆就省下来了。它长这样:
import java.io.*;
public class copy {
public static void main(String[] args){
try(BufferedReader br=new BufferedReader(new FileReader("C:\\data\\将进酒.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\data\\buffercopy.txt"));){
char[] c=new char[1024];
int len;
while((len=br.read(c))!=-1){
bw.write(c,0,len);
}
}catch (IOException e){
e.printStackTrace();
}
}
}
简洁了很多,然后jdk9后又有了新的解决方案,但是它还是得抛出异常,可能他有什么特别的可取之处吧,但是以我短浅的眼光来看,到这就够用了,所以不再深究。