Java 11에서는 try-with-resources 문을 사용하여 BufferedReader를 생성하고 자동으로 닫을 수 있다.

BufferedReader br = new BufferedReader(new FileReader(queryPath));
try {
    StringBuilder sb = new StringBuilder();
    String line;

    while ((line = br.readLine()) != null) {
        sb.append(line).append("\n");
    }
    return sb.toString();
} catch (Exception e) {
    throw e;
} finally {
    br.close();
}

위 코드를 아래와 같이 변경해보았다.

try-with-resources 문을 사용하면 BufferedReader를 명시적으로 닫을 필요가 없으며

또한 IOException만 처리하면 되므로 예외처리도 간단해진다.

try (BufferedReader br = new BufferedReader(new FileReader(queryPath))) {
    StringBuilder sb = new StringBuilder();
    String line;

    while ((line = br.readLine()) != null) {
        sb.append(line).append("\n");
    }

    return sb.toString();
} catch (IOException e) {
    throw e;
}

Files와 Stream을 이용해 더 짧게 바꿀 수도 있다.

Java 8 이상에서 가능한 Files 클래스와 Stream API를 사용하여 파일을 읽고 문자열로 변환하는 방법이다.

Files.lines() 메서드는 내부적으로 파일을 열고 자동으로 닫아서 명시적으로 뭘 안닫아도 된다~~

try {
    String sqlString = Files.lines(Paths.get(queryPath))
                           .collect(Collectors.joining("\n"));
    return sqlString;
} catch (IOException e) {
    throw e;
}

+ Recent posts