finally 를 사용하는 예
finally문에는 예외 발생여부와 상관없이 실행되어야 할 코드가 있을 경우 작성하며, 필요없을 경우 생략할 수 있습니다.
디비나 파일의 경우 사용후에는 닫아줘야 함 .(close() 실행)
package chapter20230907.Exception;
import java.util.*;
import java.io.FileInputStream;
public class ExceptionTest03 {
public static void main(String[] args) {
String path = "./sample_file/test.txt"; // 이스케이프 문자 \를 사용하며 \\ 로 나타냄
// FileInputStream 는 InputStream 를 상속받았으며, 파일로 부터 바이트로 입력받아, 바이트 단위로 출력할 수 있는 클래스이다.
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(path); // 파일 넣어줌
System.out.println("지정한 경로에 파일이 존재합니다.");
} catch(Exception e) {
System.out.println("지정한 경로에 파일이 존재하지 않습니다");
} finally { // 예외 발생여부와 상관없이 실행
if(fileInputStream != null) {
try {
fileInputStream.close(); // 파일 닫아줌
} catch(Exception e) {;}
System.out.println("파일을 닫았습니다");
}
System.out.println("자원을 해재하고 종료합니다.");
}
}
}
package chapter20230907.Exception;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionTest04 {
public static void main(String[] args) {
String path = "./sample_file/test.txt"; // 이스케이프 문자 \를 사용하며 \\ 로 나타냄
FileInputStream fis = null;
try {
fis = new FileInputStream(path);
System.out.println("파일 열기 성공");
} catch(FileNotFoundException e) { // 예외 확인 본인게 아니면 다음으로 넘어감
// 다형성을 이용한 예외 처리
System.out.println("*** FileNotFoundException ***");
} catch(IOException e) { // 예외 확인 본인게 아니면 다음으로 넘어감
System.out.println("*** IOException ***");
e.printStackTrace();
} catch(Exception e) {
System.out.println("*** Exception ***");
e.printStackTrace();
}
finally {
if(fis != null) {
try {
fis.close();
} catch(IOException e) {;}
System.out.println("파일을 닫았습니다.");
}
System.out.println("프로그램 종료");
}
}
}