Writer는 Java에서 문자(char 단위)를 출력(쓰기)하기 위한 추상 클래스
구현체는 다음과 같다.
| 대표적인 Writer 클래스 | 설명 |
|---|---|
FileWriter | 텍스트를 파일에 쓰기 위한 Writer |
BufferedWriter | Writer에 버퍼를 추가해 성능을 향상시키는 Writer |
PrintWriter | println() 같은 편리한 메서드를 제공하는 Writer |
FileWriter같은 Writer는 매번 디스크에 접근한다.
FileWriter fw = new FileWriter("a.txt");
fw.write("H");
fw.write("e");
fw.write("l");
fw.write("l");
fw.write("o");
fw.close();
//5번의 디스크 I/O
단점
write()가 호출될 때마다 바로 디스크에 기록됨
write횟수가 많을수록 매우 느린 작업인 디스크I/O가 많이 일어난다.
해결책
데이터를 모았다가 한방에 쓰는 것
write() → 버퍼(메모리)에 저장 → 버퍼가 차거나 flush() 또는 close() 호출될 때 한 번에 파일에 기록
BufferedWriter는 Writer에 버퍼를 추가한 클래스이다.
//FileWriter
//try with resource
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("Hello");
bw.newLine(); // 개행 처리
bw.write("BufferedWriter");
} catch (Exception e) {
e.printStackTrace();
}
//Files
//try with resource
Path tempFile = Files.createTempFile(PATH, temp-, .json);
try(BufferedWriter bw = Files.newBufferedWriter(tempFile, StandardCharsets.UTF_8, StandardOpenOption.TRUNCATE_EXISTING)) {
bw.write(json);
}