3. その他の入出力クラス
- 3.1. java.io.PrintWriter
- 3.2. java.io.PrintStream
- 3.3. java.lang.System.in
- 3.4. その他の入出力ソースを取り扱うクラス
3.1. java.io.PrintWriter
「PrintWriter」は様々なデータをテキスト出力ストリームに出力するクラスです。「PrintWriter」は他のクラスと以下の点で異なっています。
- 基本データ型のデータを出力するメソッドを持つ。
- 自動フラッシュの機能を持つ。フラッシュを行うのは「println」メソッドを呼び出したときで、自動フラッシュを行わないようにする事も可能です。
- 「write」メソッドを除いて「IOException」例外を発生しない。出力にエラーがあったかどうかは「checkError」メソッドで調べる事ができます。
FileOutputStream out=new FileOutputStream("output.txt"); PrintWriter writer=new PrintWriter(out); writer.println(1); writer.println('a'); writer.println("test"); writer.flush(); writer.close();
「PrintWriter」のコンストラクタは全部で4種類あります。引数に「OutputStream」「Writer」のどちらのタイプのものを取る事も可能です。またデフォルトでは自動フラッシュは行われないので、行う場合には引数を2つ取るコンストラクタを使用します。
出力メソッドは「print」と「println」で、色々なデータ型のデータを引数にとってそれを出力する機能を提供します。「print」と「println」の違いは、最後に行区切り文字を出力するかしないかの違いです。文字列を出力するメソッドも提供しますが、プラットフォームのデフォルトの文字コードに従いエンコードを行います。
(実習課題1)
以下のプログラムを作成しなさい。
- プログラムの実行時に指定する引数は2つ。1つは出力ファイル名。もう1つは自然数。
- ファイルに、1から指定された数までの自然数を1行ずつ書き込む事。
3.2. java.io.PrintStream
「PrintStream」は「PrintWriter」とほとんど同じ機能を提供するクラスです。違う点は2点で、1つはコンストラクタの引数の取るのは「OutputStream」だけである点。もう1つは自動フラッシュを「println」メソッドが呼び出されたときだけではなく、改行文字を指定した場合にも行う点です。したがって「PrintStream」クラスを明示的に使用する場面はほとんどありません。大抵の場合、「PrintWriter」クラスを使用します。
PrintStream out=new PrintStream(new FileOutputStream("output.txt"),true); out.println(1); out.println('a'); out.println("test");
「PrintStream」を明示的に使用することはほとんどありませんが、コンソールなどの標準出力へ出力する際に使用します。「java.lang.System」クラスのクラス変数「out」が、「PrintStream」のインスタンスだからです。これまで
System.out.println("test");
とコンソールへ出力する際には記述してきましたが、「println」は「PrintStream」クラスのメソッドを呼び出していたわけです。
「System」クラスには「err」という標準エラー出力へ出力するためのクラス変数があります。これも「PrintStream」クラスのインスタンスですので、「System.out」と同じように扱う事ができます。
(実習課題2)
以下のプログラムを作成しなさい。
- 様々な型のデータを標準出力に出力する事。
- 標準エラー出力にも出力する事。