리소스는 AutoClosable 인터페이스를 구현하는 개체입니다. 프로그램에서 리소스를 사용할 때마다 사용 후에는 닫는 것이 좋습니다.
처음에 이 작업은 finally 블록을 사용하여 수행됩니다.
예
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; public class FinalExample { public static void main(String[] args) throws IOException { File file = null; FileInputStream inputStream = null; try { file = new File("D:\\source\\sample.txt"); inputStream = new FileInputStream(file); Scanner sc = new Scanner(inputStream); while(sc.hasNextLine()) { System.out.println(sc.nextLine()); } } catch(IOException ioe) { ioe.printStackTrace(); } finally { inputStream.close(); } } }
출력
This is a sample file with sample text
암
Java의 ARM은 자동 리소스 관리를 의미하며 Java7에서 도입되었으며 리소스는 try 블록에서 선언되어야 하고 블록 끝에서 자동으로 닫힙니다. try-with 리소스 블록이라고도 하며 여기에서 선언하는 개체는 리소스여야 합니다. 즉, AutoClosable 유형이어야 합니다. .
다음은 try-with-resources 문의 구문입니다 -
try(ClassName obj = new ClassName()){ //code…… }
JSE7부터 try-with-resources 문이 도입되었습니다. 여기에서 try 블록에 하나 이상의 리소스를 선언하고 사용 후 자동으로 닫힙니다. (try 블록의 끝에서)
try 블록에서 선언한 리소스는 java.lang.AutoCloseable 클래스를 확장해야 합니다.
예
Following program demonstrates the try-with-resources in Java. import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; public class FinalExample { public static void main(String[] args) throws IOException { try(FileInputStream inputStream = new FileInputStream(new File("D:\\source\\sample.txt"));) { Scanner sc = new Scanner(inputStream); while(sc.hasNextLine()) { System.out.println(sc.nextLine()); } } catch(IOException ioe) { ioe.printStackTrace(); } } }
출력
This is a sample file with sample text
자바의 여러 리소스
또한 try-with 리소스에서 여러 리소스를 선언할 수 있으며 블록이 끝날 때 모두 한 번에 닫힙니다.
예
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileCopying { public static void main(String[] args) { try(FileInputStream inS = new FileInputStream(new File("E:\\Test\\sample.txt")); FileOutputStream outS = new FileOutputStream(new File("E:\\Test\\duplicate.txt"))){ byte[] buffer = new byte[1024]; int length; while ((length = inS.read(buffer)) > 0) { outS.write(buffer, 0, length); } System.out.println("File copied successfully!!"); } catch(IOException ioe) { ioe.printStackTrace(); } } }
출력
File copied successfully!!