標準入力と標準出力

コンピュータが逐次的に読んだり書いたりするデータのことをデータストリームと呼びます。データストリームは簡単に言えばバイト(8bitのデータ)が並んだものです。ファイル,キーボード,コンソール画面などもデータストリームと考えることができます。

実行時にプログラムに割り当てられている入力用データストリームのことを標準入力とよび,出力用データストリームのことを標準出力とよびます。(標準エラー出力というのもあるのですが,今回は割愛します。興味のある人は調べてください)

たいていのプログラムは,どこかからデータを入力して計算を行って結果をどこかに出力しますが,通常は入力先はキーボード,出力先はコンソール画面となっています。普通は標準入力がキーボード,標準出力がコンソール画面になっているからです。

Java のソースコードに時々出てくる System.in は標準入力,System.out は標準出力を意味しています。

    System.out.println("Hello");
というのは,「標準出力に "Hello"(+改行)を出力しなさい」という意味なのです。

リダイレクト

コマンドプロンプトでは,プログラム実行時に標準入力および標準出力を指定したファイルに変更することができます。標準入力や標準出力を変更することをリダイレクトとよびます。

標準入力のリダイレクト

標準入力を指定したファイルにリダイレクトするには,コマンドの後に < (「小なり」不等号)を置いてその後にファイル名を書きます。

    コマンド < ファイル名

標準出力のリダイレクト

標準出力を指定したファイルにリダイレクトするには,コマンドの後に > (「大なり」不等号)を置いてその後にファイル名を書きます。

    コマンド > ファイル名

ここで指定したファイルが既に存在する場合,結果が上書きされます(元の内容は消去されてしまいます)ので,注意してください。

標準入力と標準出力を同時にリダイレクトすることもできます。

    コマンド < ファイル名1 > ファイル名2

練習

データをファイルに保存しておき,そのファイルを標準入力にして,DataProcを実行してみましょう。

  1. まずはエディタを使って次のようなデータを用意し,"data.txt"という名前で保存しましょう。
    20↵
    12↵
    40↵
    31↵
    -1↵
    
  2. 標準入力を data.txt にリダイレクトして DataProc を実行してみます。
    H:\Documents\プログラミングI> java DataProc < data.txt↵
    合計は103.0です
    
    H:\Documents\プログラミングI> 
    
    合計を求めることができました。
  3. 標準出力を hoge.txt にリダイレクトして DataProc を実行してみます。
    H:\Documents\プログラミングI> java DataProc > hoge.txt↵
    10↵
    3↵
    5↵
    -1↵
    
    H:\Documents\プログラミングI> 
    
    何も結果が出ないで終わってしまいましたが,カレントディレクトリに "hoge.txt"というファイルが生成されているはずです。"hoge.txt"をエディタで開いてみてください。

    合計は18.0です↵
    
    結果がファイルに記録されていますね。