Java PrintWriter 마스터하기: 기능, 메서드, 실전 예제
Java PrintWriter 마스터하기
이 튜토리얼에서는 Java PrintWriter 클래스, 출력 메서드, 실전 코드 예제를 탐구합니다.
java.io의 PrintWriter 클래스는 텍스트 파일이나 다른 출력 스트림에 문자 데이터를 쓰기 위해 설계되었습니다. Writer를 확장하며 편리한 포맷팅 메서드를 제공합니다.
다른 라이터와 달리 PrintWriter는 기본 타입(int, float, char 등)을 쓰기 전에 자동으로 텍스트로 변환합니다. 또한 IOException을 절대 던지지 않으며, 대신 checkError()로 오류를 감지할 수 있습니다.
자동 플러시는 핵심 기능입니다. 활성화 시 println() 또는 printf() 호출마다 버퍼가 기본 스트림으로 플러시됩니다.
PrintWriter 작동 원리
PrintWriter는 포맷된 텍스트를 기본 Writer 또는 OutputStream에 씁니다. 생성자는 autoFlush 플래그와 선택적으로 인코딩용 Charset을 받습니다.
PrintWriter 생성하기
먼저 클래스를 임포트합니다:
import java.io.PrintWriter;
1. 기존 Writer에서
FileWriter file = new FileWriter("output.txt");
PrintWriter out = new PrintWriter(file, true); // autoFlush = true
2. OutputStream에서
FileOutputStream fos = new FileOutputStream("output.txt");
PrintWriter out = new PrintWriter(fos, true);
3. 파일명에서 직접
PrintWriter out = new PrintWriter("output.txt", true);
4. 문자 인코딩 지정
import java.nio.charset.Charset;
PrintWriter out = new PrintWriter("output.txt", true, Charset.forName("UTF-8"));
Charset을 사용하면 텍스트가 원하는 인코딩으로 쓰여집니다.
핵심 메서드
print()와 println()
이 메서드들은 원시 텍스트나 줄 종료된 텍스트를 씁니다:
print(obj) - 줄바꿈 없이 obj의 문자열 표현을 씁니다.
println(obj) - 문자열을 쓰고 시스템 줄 구분자를 추가합니다.
printf()
printf 제품군은 Java의 Formatter 문법을 지원합니다. 예:
out.printf("I am %d years old.", 25);
기타 유용한 메서드
| 메서드 | 설명 |
close() | 스트림을 닫고 리소스를 해제합니다. |
checkError() | 쓰기 오류 발생 시 true를 반환합니다. |
append(CharSequence) | 주어진 시퀀스를 라이터에 추가합니다. |
실전 예제
아래는 printf()를 사용하여 포맷된 텍스트를 output.txt에 쓰는 완전한 실행 가능 프로그램입니다:
import java.io.PrintWriter;
import java.io.FileWriter;
import java.io.IOException;
public class PrintWriterDemo {
public static void main(String[] args) {
try (PrintWriter out = new PrintWriter(new FileWriter("output.txt"), true)) {
int age = 25;
out.printf("I am %d years old.\n", age);
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 프로그램을 실행하면 output.txt가 다음 줄과 함께 생성됩니다:
I am 25 years old.
추가 자료
공식 명세는 Java PrintWriter API와 Charset 문서를 참조하세요.