一.JDK1.6之前的IO流异常处理
try{ }里面写 要自动关闭的流
前提是该类必须实现了AutoCloseable接口
该异常的处理和之前一样 并且系统会帮你自动关闭流(自动调用接口中的close方法)
自定义一个类测试是否能自动调用接口中的方法
class MyClose implements AutoCloseable{
@Override
public void close() throws Exception {
System.out.println("我被调用了");
}
}
写一个异常处理
try(
FileInputStream fis = new FileInputStream("/Users/Commander/Desktop/test/taylor.txt");
FileOutputStream fos = new FileOutputStream("/Users/Commander/Desktop/test/swift.txt");
//创建测试类的对象
MyClose myClose = new MyClose();
){
int len = 0;
byte[] b = new byte[1024];
while ((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
二.JDK1.7的新特性
流的父类都实现了一个接口 -- AutoCloseable接口
即可自动关闭的接口
测试:
private static void fun1() {
File file1 = new File("/Users/Commander/Desktop/test/123.doc");
File file2 = new File("/Users/Commander/Desktop/test/213.doc");
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file1);
fos = new FileOutputStream(file2);
int len = 0;
byte[] b = new byte[1024];
while ((len = fis.read(b)) != -1) {
fos.write(b, 0, len);
}
} catch (FileNotFoundException e) {
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}