우보우보
10
2019-12-19 13:32:57
6
186

JAVA 파일입출력 관련하여 close() 사용 질문입니다.


프로세스 중 파일입출력 close() 메소드 호출 관련하여 구글링 해도 적절한 케이스가 없어서 질문드립니다. 질문은 파일입출력 객체에 대한 close 호출을 여러번 실행해도 문제는 없는지 궁금합니다..


소스 내용은 아래와 같습니다.


File file = new File(filePath);  // 파일 객체 생성

FileWriter fw = null;   // FileWriter 객체 생성


try {

            fw = new FileWriter(file, false);  // true 지정시 파일의 기존 내용에 이어서 작성


             .....   파일에 대한 데이터 처리 .....

             

             fw.flush();


              fw.close();   // close 호출


             ..... 후속 처리 (타 클래스 호출 및 인터페이스 연동) .....

} catch(Exception e) {

            .....

} finally {

            if(fw != null)

            {

                 fw.close();  // close 호출

            }

}


지금 소스에서 close를 try와 finally에서 총 두번 호출하고 있는데, try에서 close 처리를 해주는 이유는 이후 후속 처리가 write 된 파일을 이용하여 인터페이스로 전송을 하는 처리를 하고 있어서 확실히 파일을 닫아 준 다음 처리를 하는게 맞는 것 같아 try 문 안에서도 close 처리를 하고 있습니다..


예외 사항을 고려하여 finally에서도 close를 해주고 있는 상황인데, try문 안에서도 close 처리 한 파일 객체를 finally 에서도 close를 콜 해주면 문제 될 일이 있을까요?? 문제가 될 것 같아 테스트는 진행하였는데 소스는 잘 흘러가서 혹시나 내부적으로 문제가 있을지 궁금합니다.. 감사합니다.

0
0
  • 답변 6

  • gwk
    369
    2019-12-19 13:43:59

    https://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html


    void close() throws IOException

    Closes this stream and releases any system resources associated with it. If the stream is already closed then invoking this method has no effect.


    api문서에 설명이 되어있습니다. stream이 이미 close 되었다면 해당 method를 invoking 하더라도 아무런 영향이 없습니다.

    0
  • 우보우보
    10
    2019-12-19 13:48:33

    아하 감사합니다!!!!

    0
  • bluegorila
    173
    2019-12-19 13:52:31

    여러번 호출하는건 상관없으나, IOException에 대한 처리도 중요하다고 보내요 

    여러번 호출할꺼면 fuc화 하는것도 좋을듯 

    0
  • 우보우보
    10
    2019-12-19 14:05:42

    bluegorila / 감사합니다. finally 부분에서도 해당 예외에 대한 고려를 많이 해봐야겠네요 ㅜ 감사합니다!

    0
  • gwk
    369
    2019-12-19 14:08:05
    1
  • 대빵
    173
    2019-12-19 17:33:53

    음.....예외가 발생하지 않더라도 finally 는 작동합니다. 무조건...

    .따라서 try 에 있는 close 를 빼는게 정답일것 같네여......

    try-with-resources 를 쓸수 있으면 그걸 쓰는게 더 상책으로 보이구여....

    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.