Java에서 파일에다가 출력을 할 때 PrintWriter와 BufferedWriter를 이용할 수 있다.
(Writer를 상속하는 클래스는 BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter가 있지만 대표적인 것만 다루기로 하겠다.)

우선 PrintWriter의 경우는  print, println, printf 처럼 다양한 출력함수를 제공함으로써 파일출력을 편하게 해준다.
BufferedWriter의 경우는 버퍼를 사용하여 통해 좀 더 효율적인 파일쓰기를 지원한다.

이 두가지 방법을 마치 둘 중에 하나를 선택해야한다는 흑백논리로 생각하는 사람들이 있는데 이는 큰 오산이다.
Java의 파일 IO 클래스들은  데코레이터 패턴을 사용한다.
즉, 원시 클래스에다가 원하는 기능을 가지는 클래스를 가지고 입맛대로 꾸며서 사용할 수 있다는 것이다.

위의 코드처럼 PrintWriter를 만들어서 사용하면 PrintWriter의 장점과 BufferedWriter의 장점을 모두 이용할 수 있다.