스텍오버플로우에서 발견한 예제이다. 

 

Java io ugly try-finally block

Is there a not so ugly way of treat the close() exception to close both streams then: InputStream in = new FileInputStream(inputFileName); OutputStream out = new FileOutputStream(outputFil...

stackoverflow.com

 

아래와 같이 질문자는 이 구조를 이쁘게 바꾸고 싶었던 것이다.

    InputStream in = new FileInputStream(inputFileName);
    OutputStream out = new FileOutputStream(outputFileName);

    try {
        copy(in, out);
    } finally {
        try {
            in.close();
        } catch (Exception e) {
            try {
                // event if in.close fails, need to close the out
                out.close();
            } catch (Exception e2) {}
                throw e; // and throw the 'in' exception
            }
        }
        out.close();
    }

 

답변자는 위 코드를 아래처럼 이쁘게 만들어줬다... 최소 탑 연예인 코디네이터

  InputStream in = null;
   OutputStream out = null;
   try {
       in = new FileInputStream(inputFileName);
       out = new FileOutputStream(outputFileName);
       copy(in, out);
   finally {
       close(in);
       close(out);
   }

  public static void close(Closeable c) {
     if (c == null) return; 
     try {
         c.close();
     } catch (IOException e) {
         //log the exception
     }
  }

그리고 이 예제를 답변으로 준사람은 아래와 같이 글을 더했다.

  • Java 7(및 Android SDK 19 - KitKat)부터 이제 이것을 더 깔끔하게 만들기 위한 리소스 구문으로 시도가 있습니다. 이를 처리하는 방법은 이 질문 에서 다룹 니다. 
 

Correct idiom for managing multiple chained resources in try-with-resources block?

The Java 7 try-with-resources syntax (also known as ARM block (Automatic Resource Management)) is nice, short and straightforward when using only one AutoCloseable resource. However, I am not sure ...

stackoverflow.com

 

복사했습니다!