[TIL] 2021-02-16

pej4303·2021년 2월 15일
0

TIL

목록 보기
3/5
post-thumbnail

표준입출력

표준 입출력을 담당하는 System 클래스에 대해 알아보자.

System 클래스

  • final 클래스로 상속 및 인스턴스를 만들 수 없음
    public final class System {
    ...
    }
  • 표준 입력, 표준 출력 및 오류 출력 스트림 기능이 있으며
    외부에서 정의된 속성 및 환경 변수에 대한 정보 제공,
    배열 일부를 빠르게 복사하기 위한 유틸리티 메소드가 있음
  • 별도의 스트림을 생성하는 코드를 작성하지 않아도 자동적으로 생성됨
  1. System.in
  • 콘솔로부터 데이터를 입력받을 때 사용
  • 반환타입이 InputStream
public final static InputStream in = null;
  1. System.out
  • 콘솔로 데이터를 출력할 때 사용
  • 반환타입이 PrintStream
public final static PrintStream out = null;
  1. System.err
  • 콘솔로 오류 데이터를 출력할 때 사용
  • 반환타입이 PrintStream
public final static PrintStream err = null;

표준입출력의 대상변경

  1. setIn()
  • 표준 입력 스트림을 지정한 대상으로 재할당함
  1. setOut()
  • 표준 출력 스트림을 지정한 대상으로 재할당함
  1. setErr()
  • 표준 오류 출력 스트림을 지정한 대상으로 재할당함
PrintStream ps = null;
FileOutputStream output = null;
String filePath = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13\\test.txt";

try {
    output = new FileOutputStream(filePath);
    ps = new PrintStream(output);
    System.setOut(ps);    // 출력대상을 파일로 변경
    
} catch (Exception e) {
    e.printStackTrace();
}

// System.out은 파일로 대상을 변경했기 때문에 System.err 내용만 나옴 
System.out.println("## System.out ##");
System.err.println("## System.err ##");

[ 실행결과 ]
## System.err ##

RandomAccessFile

  • 하나의 클래스로 파일에 대한 입출력이 모두 가능함
  • 기본 자료형 단위로 데이터를 입출력 할 수 있음
  • 내부적으로 파일포인터 때문에 파일의 어느 위치에서나 읽기, 쓰기가 가능함
int[] tmpArr = { 1, 10, 100, 1000, 2, 20, 200, 2000 };
        
// int배열의 데이터를 txt에 저장한 다음 출력함
String filePath = "D:\\project\\workspace\\studyhalle\\src\\main\\java\\s1\\week13\\testRandomAccess.txt";
String mode = "rw";

try {
    RandomAccessFile file = new RandomAccessFile(filePath, mode);
    for (int i=0; i<tmpArr.length; i++) {
        file.writeInt(tmpArr[i]);
    }
    
    file.seek(0);    // write()하면서 파일포인터가 마지막으로 이동했기때문에 포인터의 위치를 다시 처음으로 이동시킴
    
    // while(true) {
    // 아무것도 읽지 못하고 EOFException이 발생하는 것을 방지함
    while(file.length() != file.getFilePointer()) {
        System.out.println(file.readInt());
    }
    
} catch (Exception e) {
    e.printStackTrace();
}
  • testRandomAccess.txt 파일이 생성이 되지만 안의 내용은 알아 볼 수 없음

📒 Reference

  • Java의 정석
profile
기록하는 습관을 갖자

0개의 댓글