[TIL] 2021-02-16


標準I/O


標準I/Oを担当するシステムクラスを理解します.
システムクラス
  • finalクラスを使用して継承とインスタンス
    public final class System {
    ...
    }
  • を作成できません.
  • 標準入力、標準出力、エラー出力ストリーム機能.
    外部定義のプロパティと環境変数の情報を指定します.
  • は、アレイの一部を迅速にコピーするための実用的な方法を提供します.
  • を自動的に生成し、個別のストリームを生成するコードを記述する必要はありません.
  • System.in
  • コンソールからのデータ入力受信には
  • を用いる.
  • 戻りタイプはInputStream
  • public final static InputStream in = null;
  • System.out
  • コンソール出力データは
  • を用いる.
  • 戻りタイプはPrintStream
  • です.
    public final static PrintStream out = null;
  • System.err
  • コンソールを使用してエラーデータ
  • を出力する.
  • 戻りタイプはPrintStream
  • です.
    public final static PrintStream err = null;

    標準入出力のターゲットの変更

  • setIn()
  • 標準入力ストリームは、指定するターゲット
  • に再割り当てされる.
  • setOut()
  • 標準出力ストリームは、指定するターゲット
  • に再割り当てされる.
  • 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

  • クラスで、すべてのファイルのI/O
  • に使用できます.
  • 基本データ入出力部
  • ファイルポインタを内蔵し、ファイルの任意の場所から
  • を読み取り、書き込むことができる.
    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の定式