I/O 操作很容易产生 I/O 异常,若不释放资源会产生内存泄漏
对于 I/O 异常,有几种简单的方式
1.使用最普通的 try-catch-finally
FileWriter fw = null; //提高变量的作用域
try{
//可能会产生异常的代码
fw = new FileWriter("D:\\a.txt",true);
for(int i=0;i<10;i++){
fw.write("java教程"+i+"\r\n");
}
}catch(IOException e){
//处理异常
System.out.println(e);
}finally{
//必须进行的代码,这里指关闭资源
if(fw!=null){
try{
fw.close();
}catch(IOException e){
System.out.println(e);
}
}
}
2.jdk7的新特性
把可能出异常的变量,定义在 try() 的小括号中,作用域只在 try 中, 不需要finally
try(FileWriter fw = new FileWriter("D:\\a.txt",true);){
//可能会产生异常的代码
for(int i=0;i<10;i++){
fw.write("java教程"+i+"\r\n");
}
}catch(IOException e){
//处理异常
System.out.println(e);
}
3.jdk9的新特性
在 try() 的小括号中,引入外部定义的变量,它的作用域也会限定在 try 中
FileWriter fw = new FileWriter("D:\\a.txt",true); //定义抛出异常
try(fw){
//多个变量用 分号; 隔开
//可能会产生异常的代码
for(int i=0;i<10;i++){
fw.write("java教程"+i+"\r\n");
}
}catch(IOException e){
//处理异常
System.out.println(e);
}
//一旦超出了 try 定义域,流会自动关闭,
//虽然 fw 作用域在外部,但使用会报错