NMP-Study / EffectiveJava2022

Effective Java Study 2022
5 stars 0 forks source link

아이템 9. try-finally보다는 try-with-resources를 사용하라 #9

Closed okhee closed 2 years ago

bluewbear commented 2 years ago

기존 try-finally

static String firstLineOfFile(String path) throws IOException {
   BufferedReader br = new BufferedReader(new FileReader(path));
   try {
      return br.readLine();
   } finally {
      br.close();
   }
}

문제 : br.readLine() 에서 예외가 발생하고, br.close()에서도 예외가 발생한다면, IOException으로 나오는 예외는 br.close()의 예외밖에 없음. 최초에 발생한 br.readLine() 예외는 알 수 없음

try-with-resources (Java7 에서 추가)

static String firstLineOfFile(String path) throws IOException {
   try (BufferedReader br = new BufferedReader(new FileReader(path))) {
      return br.readLine();
   }

두개 이상의 리소스는 다음과 같이 사용 가능

static void copy(String src, String dst) throws IOException {
   try (InputStream in = new FileInputStream(src);
      OutputStream out = new FIleOutputStream(dst)) {
      byte [] buf = new byte[BUFFER_SIZE];
      int n;
      while ((n = in.read(buf)) >= 0) {
         out.write(buf, 0, n);
      }
   }
}