자바/입출력 IO

표준 입출력과 File: System(in, out, err)

백_곰 2022. 4. 27. 14:02

1. 표준 입출력 - System.in, System.out, System.err

- 자바에서는 System.in, System.out, System.err을 제공하는데, 자바 어플리케이션의

실행과 동시에 사용할 수 있게 자동적으로 생성되기 때문에 개발자가 별도로 스트림을

생성하는 코드를 작성하지 않고도 사용 가능하다.

 

- in, out, err는 System에 정의된 클래스(static) 변수이다.

 

- 아래의 코드처럼 InputStreamPrintStream이 선언부로 되어있지만, 사실 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.outSystem.err는 모두 출력 대상이 콘솔이기 때문에, println을 쓴다면 같은 결과를 얻는다. )

 

 

 

 

2-1. 표준 입출력의 대상변경을 이해하기 위한 예제(1)

: System.out의 출력 소스를 test.txt로 변경하는 예제이다.

 

Exercise021