자바 IO 학습 노트 (8): System 클래스 의 IO 지원

11377 단어 java io
System 류 의 상수
System 은 시스템 클래스 를 나타 내 는데 이것 도 IO 에 일정한 지원 을 해 주 었 다.
  • public static final PrintStream out  대응 하 는 시스템 표준 출력, 일반적으로 모니터
  • public static final PrintStream err   오류 정보 출력
  • public static final InputStream in   표준 입력 에 대응 하여 일반적으로 키보드
  • 또 역사 에 남 겨 진 문제 로 인해 전체 변 수 는 대문자 가 없습니다 ~
    System.out
    System. out 출력 을 사용 할 때 출력 위 치 를 모니터 에 정의 합 니 다.
    FileOutputStream 은 파일 에 위치 하고 System. out 은 화면 에 위치 합 니 다.
    OutputStream 을 사용 하여 화면 출력 완료 (PrintStream 은 OutputStream 의 하위 클래스)
     1 import java.io.IOException;
    2 import java.io.OutputStream;
    3
    4 public class Test26 {
    5 public static void main(String[] args) throws IOException {
    6 OutputStream out=System.out;
    7 out.write("Hello World!".getBytes());
    8 out.close();
    9 }
    10 }

    이것 은 사실 다 태 적 인 표현 이다
     
    System.err
    System. err 가 표시 하 는 잘못된 표준 출력 입 니 다. 프로그램 에 오류 가 발생 하면 System. err 를 사용 하여 출력 하면 됩 니 다.
     1 public class Test27 {
    2 public static void main(String[] args) {
    3 String str="Hello World";
    4 try{
    5 int a=Integer.parseInt(str);
    6 }catch(Exception e){
    7 System.err.println(e);
    8 }
    9 }
    10 }

    근 데 System. out 출력 결과 랑 똑 같 냐 고 물 어보 시 는데 뭐 가 달라 요?
     
    System. out 과 System. err 의 차이
  • System. out 과 System. err 는 모두 PrintStream 의 실례 화 대상 이 며, 실례 코드 를 통 해 둘 다 잘못된 정 보 를 출력 할 수 있 음 을 알 수 있 지만, 일반적으로 System. out 은 정 보 를 사용자 에 게 보 여 주 는 정상 적 인 정보 표시 이 며, System. err 의 정 보 는 반대로 사용자 가 보고 싶 지 않 고 배경 에서 직접 인쇄 되 며, 오 류 를 전문 적 으로 보 여 주 는 것 이다.
  • 일반적으로 잘못된 정 보 를 출력 하려 면 System. out 을 사용 하지 않 고 System. err 를 직접 사용 하 는 것 이 좋다 는 점 은 그 개념 에서 만 나 눌 수 있다.
  • System.in
    System. in 은 실제로 키보드 의 입력 흐름 으로 그 자체 가 InputStream 형식의 대상 입 니 다. 이 를 통 해 키보드 에서 데 이 터 를 읽 는 기능 을 수행 할 수 있 습 니 다.
    InputStream 은 입력 흐름 에 대응 합 니 다. 입력 흐름 은 지 정 된 위치 에서 읽 을 수 있 습 니 다. 이전 에는 FileInputStream 을 파일 에서 읽 었 습 니 다.
     1 import java.io.IOException;
    2 import java.io.InputStream;
    3
    4 public class Test28 {
    5 public static void main(String[] args) throws IOException {
    6 InputStream in=System.in;
    7 byte[] b=new byte[1024];
    8 int len=in.read(b);
    9 System.out.println(new String(b,0,len));
    10 }
    11 }

    byte 배열 로 길 이 를 지정 하지 않 으 면:
     1 import java.io.IOException;
    2 import java.io.InputStream;
    3
    4 public class Test29 {
    5 public static void main(String[] args) throws IOException {
    6 InputStream in=System.in;
    7 StringBuilder buf=new StringBuilder();
    8 int temp=0;
    9 while((temp=in.read())!=-1){
    10 char c=(char) temp;
    11 if(c=='
    ')break;
    12 buf.append(c);
    13 }
    14 in.close();
    15 System.out.println(buf.toString());
    16 }
    17 }

    그러나 상기 코드 는 큰 문제 가 있 습 니 다. 중국 어 를 입력 하면 ~, 그래서 가장 좋 은 방법 은 한번에 데 이 터 를 메모리 에 넣 고 한꺼번에 모두 꺼 내 는 것 입 니 다. 이 기능 을 실현 하려 면 Buffered Reader 류 를 사용 하여 다음 에 소개 하 겠 습 니 다 ~
     
    입 출력 방향 변경
    System. out, System. err, System. in 은 모두 리 셋 기능 이 있 는데 각각 setOut, setErr, setIn 방법 이다.
    System. out 재 설정
     1 import java.io.File;
    2 import java.io.FileNotFoundException;
    3 import java.io.PrintStream;
    4
    5 public class Test30 {
    6 public static void main(String[] args) throws FileNotFoundException {
    7 File f = new File("d:" + File.separator+"test.txt");
    8 System.setOut(new PrintStream(f));
    9 String str="This is a test!";
    10 System.out.println(str);
    11 }
    12 }

    System. err 재 설정
     1 import java.io.ByteArrayOutputStream;
    2 import java.io.PrintStream;
    3
    4 public class Test31 {
    5 public static void main(String[] args) {
    6 ByteArrayOutputStream out=new ByteArrayOutputStream();
    7 System.setErr(new PrintStream(out));
    8 System.err.println("Test---------------");
    9 System.out.println(out.toString());
    10 }
    11 }

    일반적으로 err 의 방향 을 바 꾸 는 것 을 권장 하지 않 습 니 다. 왜냐하면 이 정 보 는 사용자 가 보기 싫 기 때 문 입 니 다.
    System. in 방향 바 꾸 기
     1 import java.io.File;
    2 import java.io.FileInputStream;
    3 import java.io.IOException;
    4 import java.io.InputStream;
    5
    6 public class Test32 {
    7 public static void main(String[] args) throws IOException {
    8 File f = new File("d:" + File.separator+"test.txt");
    9 System.setIn(new FileInputStream(f));
    10 InputStream in=System.in;
    11 byte[] b=new byte[1024];
    12 int len=in.read(b);
    13 in.close();
    14 System.out.println(new String(b,0,len));
    15 }
    16 }

    일반적으로 가장 많이 사용 하 는 것 은 System. out 의 방향 을 바 꾸 는 것 입 니 다 ~

    좋은 웹페이지 즐겨찾기