BufferedReader 클래스는 버퍼를 이용하는 대표적인 I/O(Input/Output) 클래스다.
입력된 데이터를 바로 전달하는 것이 아닌, 버퍼에 저장해두었다가 전달하는 방법이다.
하나하나씩 전달하는 것이 아니라 모아서 한번에 전달하기 때문에 속도가 빠르다.
BufferedReader 예외처리
public void practice2() {
BufferedReader br = null;
br = new BufferedReader(new FileReader(""));
br.close();
}
위와 같이 작성을 하면 2군데에서 빨간 줄이 그어지면서 예외처리를 하라는 메시지가 뜬다.
1) IOExeption -> br.close();
BufferedWriter 객체는 반드시 flush() 또는 close()를 해서 스트림을 끝내야 하므로 꼭 적어줘야 한다.
BufferedReader와 BufferedWriter 클래스의 메소드들은 입출력에러가 발생할 경우 자체적으로 IOException을 던지도록 정의되어있다. 그러므로 이 메소드들을 사용할 때 반드시 예외처리를 해주어야 한다.
2) FileNotFoundException -> new FileReader("")
읽어오는 파일이 없으므로 파일을 찾을 수 없다는 예외를 처리해주어야 한다.
public void practice2() {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(""));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("꼭 출력")
}
}
이로써 Checked Exception은 해결이 되었는데 이 상태로 실행을 하면
br.close()에서 NullPointerException이 발생한다.
br 이 null로 정의되어 있기때문에 null에서 close메소드를 호출하려고 하는 것이므로 nullpointer가 발생하는 것이다.
따라서 아래와 같이 if문으로 코드를 수정하여 해결할 수 있다.
IOExeption , FileNotFoundException , NullPointerException -> try ~ catch문, If문 으로 예외처리
public void practice2() {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(""));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(br != null)br.close();
// br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("꼭 출력")
}
}
1) if ( br != null) br.close();
null을 참조하는 레퍼런스변수 br에 close()를 호출하여 NullPointerException이 발생했고, if문으로 처리할 수 있다.
출처 및 참고:
https://snupi.tistory.com/48 [SNUPI]
'Java > 정리' 카테고리의 다른 글
[Java] 다형성 (0) | 2021.05.25 |
---|---|
[Java] 예외처리_try with resource (0) | 2021.05.25 |
[Java] 상속(Inheritance) (0) | 2021.05.19 |
[Java] 문자열 compareTo()_문자열비교메소드 (0) | 2021.05.17 |
[Java] 객체 (0) | 2021.05.14 |