Img profile default
정승훈
  • 2016.9.26 17:38
  • 조회수 68
  • 답변수 1
Img profile default
정승훈
  • 2016.9.26 17:38
  • 조회수 68
  • 답변수 1

질문합니다

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class CharIOExam02 {
public static void main(String[] args) {
BufferedReader br = null;
PrintWriter pw = null;
try{

br = new BufferedReader(new FileReader("src/javaIO/exam/CharIOExam02.java"));
pw = new PrintWriter(new FileWriter("test.txt"));
String line = null;
while((line = br.readLine())!= null){
pw.println(line);
}
}catch(Exception e){
e.printStackTrace();
}finally {
pw.close();
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
여기서 close에서 br.close만 try문 안에 들어있는 이유가 있나요 ..
pw.close()는 밖에있고 br.close()는 안에있어서 궁금합니다

  • #자바 중급
  • #Char 단위 입출력(File)

1 답변

  • 980684181999126
    강경미
    • 2016.12.23 14:23

    exception 공부하실 때 처리하는 두 가지 방법이 있었다는거 기억 하시나요??

    try-catch 블럭을 이용해서 직접 처리할 수도 있고, throws 시킬 수도 있었죠? checked exception은 반드시 처리해야만 하는데 throws 했다는것은 exception을 처리하지 않았다는 의미 이기도해요. 이럴 경우는 반드시 해당 메소드를 사용하는 쪽에서 처리해야지만 에러가 발생하지 않습니다.

    api를 살펴보면 PrintWrite 클래스가 정의하고 있는 close 메소드는 public void close() 이렇게 정의가 되어있어요. 특별히 exception을 throws 하고 있지 않기 때문에 사용하는 쪽에서 처리할 필요가 없는거죠.. 그런데... BufferedReader 클래스의 throws 메소드는 public void close()
    throws IOException 이렇게 정의 되어있는것을 확인 하실 수 있을거예요.. 해당 메소드는 메소드 안에서 발생할 수 있는 IOException 을 throws 하고 있기 때문에 그 메소드를 사용하는 쪽에서는 반드시 처리할 수 밖에 없어요... 이 예제에서는 처리 방법으로 try-catch 블럭을 이용해서 처리해준거구요..

    조금 이해가 되셨을까요???

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.