System.out 필드와 표준 출력 스트림
System 클래스의 out 필드는 표준 출력 스트림을 나타내며, PrintStream 클래스의 객체입니다.
이 객체의 println() 메서드는 Java에서 유효한 모든 타입의 값을 인자로 받아 출력한 뒤 줄바꿈을 수행합니다.
기본적으로 Java에서는 콘솔(화면)이 표준 출력 스트림(System.out)으로 설정되어 있습니다. 따라서 System.out.println() 메서드에 문자열 값을 전달하면 해당 문자열이 콘솔에 그대로 출력됩니다.
System.out.println() 출력을 파일로 리디렉션하기
Java System 클래스의 setOut() 메서드는 PrintStream 클래스의 객체를 인자로 받아 이를 새로운 표준 출력 스트림으로 설정합니다.
따라서 System.out.println()의 출력을 파일로 리디렉션하려면 아래 단계를 순서대로 따르면 됩니다.
File 클래스의 객체를 생성합니다.
앞서 생성한 File 객체를 매개변수로 전달하여 PrintStream 클래스를 인스턴스화합니다.
System 클래스의 setOut() 메서드를 호출하고 PrintStream 객체를 인자로 전달합니다.
마지막으로 println() 메서드를 사용해 데이터를 출력하면, 첫 번째 단계에서 생성한 File 객체가 가리키는 파일로 출력이 리디렉션됩니다.
예제 코드
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
public class SetOutExample {
public static void main(String args[]) throws IOException {
//File 클래스 인스턴스화
File file = new File("D:\sample.txt");
//PrintStream 클래스 인스턴스화
PrintStream stream = new PrintStream(file);
System.out.println("From now on "+file.getAbsolutePath()+" will be your console");
System.setOut(stream);
//파일에 값 출력
System.out.println("Hello, how are you");
System.out.println("Welcome to Tutorialspoint");
}
}
실행 결과
From now on D:\sample.txt will be your console
코드 설명
위 예제에서는 먼저 D 드라이브에 sample.txt 파일을 나타내는 File 객체를 생성하고, 이 파일에 데이터를 쓰기 위한 PrintStream 객체를 만듭니다.
setOut() 메서드가 호출되기 전까지의 출력은 여전히 콘솔로 전달되므로, "From now on D:\sample.txt will be your console"라는 안내 문구는 화면에 표시됩니다.
그러나 System.setOut(stream)이 실행된 이후에는 표준 출력 스트림이 파일로 교체되기 때문에, 이후 호출되는 System.out.println()의 결과인 "Hello, how are you"와 "Welcome to Tutorialspoint"는 더 이상 콘솔에 나타나지 않고 지정된 텍스트 파일에 기록됩니다.
이 방식은 프로그램 실행 로그를 파일로 저장하거나, 디버깅 정보를 별도의 파일에 남겨야 할 때 유용하게 활용할 수 있습니다.