728x90
Files.lines(filePath).forEach(line -> ...) 이런 코드를 사용하는 프로그램이 참조하는 파일 항상 삭제가 안되는 버그가 발생했다.
File symbolFile = new File("C:\\Users\\user\\readSymbol\\temp\\symbol.txt");
Files.lines(symbolFile.toPath()).forEach(line -> {
if (line.contains("GetBranchName")) {
log.debug("GetBranchName:{}", line);
}
});
프로그램 종료 시점에 임시로 생성했던 temp 디렉토리를 지우는 로직이 있는데도, 항상 symbol.txt 파일이 남아 있었다.
이전 부터 사용하던 코드라 옛날부터 그랬을거 같은데, 담당자가 바뀐 상황이니 어쩔 수 없이 수정해야지...
문제가 되는 코드가 아무래도 (java.nio.file) Files.lines 인거 같아서 설명을 찾아보니 파일의 모든 라인을 읽어서 Stream 으로 바꾼다. stream 을 종료할때 파일이 close 된다라고 되어 있다.
try with resource 문을 적용해서 stream 자원을 처리되도록 해야 한다.
try (Stream<String> lines = Files.lines(symbolFile.toPath())) {
lines.forEach(line -> {
if (line.contains("GetBranchName")) {
log.debug("GetBranchName:{}", line);
}
});
}
인터넷에 있는 코드 대충 보고 가져와서 작성하지 말자!!!
'Engineering > Java' 카테고리의 다른 글
OpenJDK download 사이트 (2) | 2024.11.14 |
---|---|
Column cannot be null 오류 해결 (1) | 2024.01.04 |
class path resource FileNotFoundException in jar (0) | 2023.11.16 |
javac: invalid target release: 11 문제 해결 (0) | 2023.07.19 |
java 11 설치 on Rocky Linux 8.6 (0) | 2023.05.10 |