표준 입출력과 File: System(in, out, err)
1. 표준 입출력 - System.in, System.out, System.err
- 자바에서는 System.in, System.out, System.err을 제공하는데, 자바 어플리케이션의
실행과 동시에 사용할 수 있게 자동적으로 생성되기 때문에 개발자가 별도로 스트림을
생성하는 코드를 작성하지 않고도 사용 가능하다.
- in, out, err는 System에 정의된 클래스(static) 변수이다.
- 아래의 코드처럼 InputStream과 PrintStream이 선언부로 되어있지만, 사실 BufferedInputStream과
BufferedOutputStream의 인스턴스를 사용한다.
public final class System{
public final static InputStream in = nullInputStream();
public final static PrintStream out = nullInputStream();
public final static PrintStream err = nullInputStream();
...
}
1-1. 표준 입출력을 이해하기 위한 예제(1)
( ^z 를 누르기 전까지 블락킹 상태에 머무른다. )
( Enter키를 누르면 마지막 두 줄 13, 10인 \r과 \n이 출력된다. )
( \r은 캐리지리턴으로 커서를 현재 라인의 첫 번째 컬럼으로 이동시킨다. )
( Enter키를 누를때 마다 \r과 \n이 등장하게 되므로, System.in에 BufferedReader를
이용해서 readLine()을 통해 라인 단위로 데이터를 읽어주면 된다. )
2. 표준 입출력의 대상변경 - setOut(), setErr(), setIn()
- setOut(), setErr(), setIn()를 사용하면 입출력을 콘솔 이외에 다른 입출력 대상으로
변경하는 것이 가능하다.
메서드 | 설명 |
static void setOut(PrintStream out) | System.out의 출력을 지정된 PrintStream으로 변경 |
static void setErr(PrintStream err) | System.err의 출력을 지정된 PrintStream으로 변경 |
static void setIn(InputStream in) | System.in의 입력을 지정된 PrintStream으로 변경 |
( System.out과 System.err는 모두 출력 대상이 콘솔이기 때문에, println을 쓴다면 같은 결과를 얻는다. )
2-1. 표준 입출력의 대상변경을 이해하기 위한 예제(1)
: System.out의 출력 소스를 test.txt로 변경하는 예제이다.