JDK1.6及之前异常处理
选中try-catch的代码块,Alt+Shift+Z,快捷键try-catch
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class DealException {
public static void main(String[] args) {
//要把这两个定义到try-catch外面
FileInputStream file1=null;
FileOutputStream file2 = null;
try {
//尝试执行代码块
file1 = new FileInputStream("utf-8.txt");
file2 = new FileOutputStream("b.txt");
int count = 0;
while((count = file1.read())!=-1){
file2.write(count);
}
} catch (Exception e) {
//出现异常时执行代码块
e.printStackTrace();
} finally{
//一般为要关闭的资源
try {
if(file1 != null){
//要进行判断,因为很有可能在try的第一句为1/0,然后字节流对象还未初始化
//这时关闭就会报错,两个流都要进行判断
file1.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
//有可能在关闭输入流的之后,出现1/0的问题,就会导致输出流无法关闭,
//所以要把输出流放到finally中
/*
* 因为就像是有两个流水的水龙头,有一个坏了,但是另一个还是要关闭的
*/
try {
if(file2 != null){
file2.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
JDK1.7之后异常处理
package io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class DealException1_7 {
public static void main(String[] args) throws IOException{
try(
//写try小括号里面的内容,会在大括号中的执行完之后,会自动释放
//原因是:FileInputStream和FileOutputStream都实现了AutoCloseable接口
FileInputStream file1 = new FileInputStream("utf-8.txt");
FileOutputStream file2 = new FileOutputStream("b.txt");
){
int count = 0;
while((count = file1.read())!=-1){
file2.write(count);
}
}
}
}