TIL (Today I Learned)
오늘의 리팩토링 1 - try-with-resources || Files 클래스와 Stream API
모디(modi)
2023. 3. 23. 13:47
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;
}