리다이렉팅 이라는 단어는 필자에게 있어서 익숙하면서도 생소한 단어이다.
굉장히 많이 보게 되는 단어임과 동시에, 리다이렉팅이라는 게 정확히 무엇을 의미하는지는 잘 모르기 때문이다.
더 미룰 수 없어 표준 입출력 리다이렉팅 에 관해서 좀 더 공부해보기로 했다.
표준 입력 과 표준 출력 , 그리고 표준 오류 스트림의 데이터를 다른 소스로 리다이렉트 하거나 다른 대상으로 보내는 것표준 입력 (stdin) -> 일반적으로 키보드 입력을 통해 데이터를 받음표준 출력 (stdout) -> 일반적인 출력 데이터를 화면(콘솔)에 출력표준 오류 (stderr) -> 오류 메시지를 화면(콘솔)에 출력입력 데이터 -> 다른 프로그램의 출력에서 받거나 파일에서 읽을 수 있음출력 데이터 -> 다른 프로그램으로 전달하거나 파일로 저장할 수 있음오류 메시지 -> 별도의 파일에 기록할 수도 있음System 클래스의 setIn , setOut , setErr 메서드를 사용해서 표준 입출력 및 에러 스트림을 리다이렉팅 할 수 있음try {
// 표준 입력 리다이렉트
// System.in
// 키보드 입력이 아닌 inputFile의 값을 입력 데이터로 받음
FileInputStream inputFile = new FileInputStream("input.txt");
System.setIn(inputFile);
// 표준 출력 리다이렉트
// System.out
// 출력을 화면(콘솔)로 받지 않고 outputFile에 저장
String output = "output.txt";
FileOutputStream outputFile = new FileOutputStream(output);
PrintStream printOut = new PrintStream(outputFile);
System.setOut(printOut)
// 표준 오류 리다이렉트
// System.err
// 에러 메시지 출력을 errorFile로 리다이렉트해서 저장
FileOutputStream errorFile = new FileOutputStream("error.log");
PrintStream printErr = new PrintStream(errorFile);
System.setErr(printErr);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = reader.readLine(); // input.txt 파일에 저장된 값을 읽어옴
System.out.printf("입력 데이터 %s를 %s에 리다이렉팅 후 저장 : \n", input, output); // input.txt 파일의 값을 읽어서 output.txt 파일에 저장
// 강제로 오류 발생
System.err.println("에러 메시지"); // error.log 에 메시지 기록
// 출력을 다시 화면(콘솔)로 되돌림
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
System.setInt(InputStream) 을 사용하여 표준 입력 스트림을 파일로 변경input.txt 파일을 읽는 FileInputStream 객체를 통해 입력을 처리System.setOut(PrintStream) 을 사용하여 표준 출력 스트림을 파일로 변경FileOutputStream 객체를 PrintStream 의 매개변수로 주고, 이를 통해 output.txt 파일에 출력 데이터를 저장 (콘솔에 출력되지 않음)System.setErr(PrintStream) 을 사용하여 표준 오류 스트림을 파일로 변경System.setOut 대신 System.setErr 를 사용BufferedReader 를 통해 현재의 표준 입력 스트림인 input.txt 파일에서 데이터를 가져옴FileOutputStream 에 파일 대신 FileDescriptor.out 을 매개변수로 주고, 이전과 동일한 방식으로 표준 출력을 다시 화면(콘솔)으로 변경참고) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/