관리 메뉴

피터의 개발이야기

[JAVA] 자바 파일 입출력, 커스컴 AutoCloseable 본문

Programming/JAVA

[JAVA] 자바 파일 입출력, 커스컴 AutoCloseable

기록하는 백앤드개발자 2021. 1. 17. 08:00
반응형

서론

데이터 백업 작업 시에 파일을 읽고 쓰는 로직이 필요하여 정리를 하였습니다.

자바8 이후 자원의 생성과 해제가 자동입니다.

 

 

Java - Try-with-resources로 자원 쉽게 해제

Java7 이전에, try-catch-finally 구문에서 자원을 해제하였습니다.

Java8에서는 try-with-resources try(...)에서 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해주는 기능입니다.

try에서 선언된 객체가 AutoCloseable을 구현하였다면 Java는 try구문이 종료될 때 객체의 close() 메소드를 호출해 줍니다.

 

 

File Read

    @Test
    public void fileReadTest() throws FileNotFoundException {

        try(
            //파일 객체 생성
            FileReader file = new FileReader("test.csv");
            BufferedReader inFile = new BufferedReader(file);
        ){

            String sLine = null;
            List<String> list = new ArrayList<>();
            while( (sLine = inFile.readLine()) != null ){
                list.add(sLine);
            }

            System.out.println(list.toString());

        }catch ( IOException e ){
            e.printStackTrace();
        }

    }

 

 

File Write

    @Test
    public void fileWriteTest(){

        try(
            FileWriter fw = new FileWriter( "fileWrite.txt" ,true);
            BufferedWriter bw = new BufferedWriter( fw);
        ){
            bw.write("Java7 이전에, try-catch-finally 구문에서 자원을 해제하였다.");
            bw.newLine();
            bw.write("Java8에서는 AutoCloseable인테페이스로 구현된 자원은 자동으로 close를 해준다. ");

        }catch (IOException e) {
            e.printStackTrace();
        }

    }

 

 

AutoCloseable을 구현하는 클래스 생성

    @Test
    public void autoCloseableTest() {

        try (makeAutoClose cr = new makeAutoClose()) {
            // 데모실행
            cr.checkTheAutoClose();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static class makeAutoClose implements AutoCloseable {
        public void checkTheAutoClose() {
            System.out.println("AutoCloseable 인터패이스로 구현되어 있다.");
        }

        @Override
        public void close() throws Exception {
            System.out.println("try()안에 객체생성되어 있다면 try 문을 벗어나면 close 메소트를 호출한다.");
       }
    }

AutoCloseable은 인터페이스로 구현이 되어 있습니다.
그래서 makeAutoClose를 만들어 자동으로 close가 실행 되는 지 살펴보았습니다.

 

 

try() 안에는 AutoCloseable  type으로 만들어진 객체만 들어갈 수 있습니다. 그래서 try문을 벗어나면 자동으로 close가 실행이 됩니다.

 

 

소스는 여기에 있습니다.

반응형
Comments