java에서 자바 환경정보를 테이블에 정리하여 html 파일을 생성하는 과정 진행 중 내용이 중간에서 끊겨서 저장되는 문제 발생했다. 몇번을 반복해도 같은 문제가 발생해 파일에 저장하기 전 완성된 최종 문자열을 출력해봤으나 문자열에는 이상이 없었다. 아마 BufferedWriter를 이용해 write()하는 과정에서 무언가 문제가 발생한 거라고 추측하고 원인을 검색해보았다.
우선 BufferedWriter는 기본적으로 버퍼가 다 찰 경우 내용을 출력하게 되는데 이때 flush()를 사용하지 않으면 출력하지 않은 내용이 있어도 출력스트림을 닫아버린다. 내 경우 이것 때문에 전체 내용이 출력되지 못하고 미완성인 채로 html파일이 저장되는 것이었다. 그래서 중간에 flush() 메서드를 추가하고 다시 실행한 결과 그제서야 제대로 저장이 되는 것을 확인할 수 있었다.
try {
File file = new File("index.html");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(answer); // 여기서 문제가 발생하는 것으로 추정
writer.close();
} catch (IOException e) {
e.printStackTrace();
}try {
File file = new File("index.html");
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(answer);
writer.flush(); // 남은 데이터를 출력
writer.close();
} catch (IOException e) {
e.printStackTrace();
}