Java7 리try-with-resources 분석(4)

44346 단어
Java SE 7에는 try-with-resources 문이 추가되었습니다.try-with-resources문구는 한 개 이상의 자원을 성명한 try문구이다.이곳의 자원 중 하나는 사용이 끝난 후에 방출을 닫아야 하는 대상을 가리킨다.try-with-resources 문장은 이 문장이 실행된 후에 모든 자원을 닫을 수 있습니다.모든 것이 자바를 실현시켰다.lang.AutoCloseable 인터페이스의 대상은 모두 try-with-resources 문장에 자원으로 사용할 수 있습니다 (java.io.Closeable는 하위 인터페이스이기 때문에 지원됩니다).
Java SE 7 이전에 리소스가 닫혀 있는지 확인하기 위해 다음 코드를 작성할 수 있습니다.

  
  
  
  
  1. static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
  2.     BufferedReader br = new BufferedReader(new FileReader(path));
  3.     try {
  4.         return br.readLine();
  5.     } finally {
  6.         if (br != null) br.close();
  7.     }
  8. }

하지만 Java SE 7에서는 위의 코드를 다음 코드로 바꿀 수 있습니다.

  
  
  
  
  1. static String readFirstLineFromFile(String path) throws IOException {
  2.     try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  3.         return br.readLine();
  4.     }
  5. }

여러 리소스를 동시에 선언할 수도 있습니다.

  
  
  
  
  1. public static void writeToFileZipFileContents(String zipFileName, String outputFileName) throws java.io.IOException {
  2.     java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");
  3.     java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);
  4.     try (
  5.         //
  6.         java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
  7.         java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
  8.     ) {
  9.         //
  10.     }
  11. }

주의해야 할 것은 위의 try-with-resources 문장이 실행된 후에 시스템은 먼저 해제writer를 닫고 해제zf를 닫는다.즉try-with-resources 문장에서 자원의 닫기 방출 순서는 그들이 만든 순서와 상반된다는 것이다.

좋은 웹페이지 즐겨찾기