Writer型

Writer型の利用方法

出力を扱うWriterを利用する方法を確認しましょう.Writer型もReader型と同じく, 多くの型が存在します.典型的な型を次に紹介します.

  • FileWriter
    • ファイル(File型)に書き込むためのWriter型.
  • PrintWriter
    • printfprintlnprintが利用できるWriter型.
      • 他のWriter型は文字単位でしか出力できない.
  • StringWriter
    • 文字列(String型)に書き込むためのWriter型.
  • OutputStreamWriter
    • OutputStream型をWriter型に変換するためのWriter型.

ここに挙げた以外にもいくつかのWriter型が存在しますが,この講義では,FileWriterPrintWriter の2つの型のみを利用します.

典型的なファイルへのデータの書き込み方法.

void writeMethod(File file, String message) throws IOException{
    PrintWriter out = new PrintWriter(new FileWriter(file)); // (2)
    // 上記の(2)の処理を区別して書くと次のような処理になる.
    //     FileWriter fwriter = new FileWriter(file);
    //     PrintWriter out = new PrintWriter(fwriter);
    out.print(message);
    out.close();
}

ファイルに文字列(String型の変数message)を書き込む方法は上記の通りです. まず,FileWriterを利用してファイルに書き込むためのWriter型を構築します. 次に,構築したFileWriterPrintWriterに渡し,文字列の出力が 可能なPrintWriterを構築します.

そして,文字列をファイルに書き込むには,PrintWriter型の変数outに対してprintメソッドを呼び出して,文字列を書き込んでいます. 他に,printlnprintfメソッドも用意されています.

最後に,これ以上ストリームを利用しないため,closeメソッドを呼び出しています.closeメソッドを 呼び出すと,ラップされているFileWriterも閉じられます.

読み込み時と同じように,IOExceptionの例外に対応しなければいけません. ここでも同じように,writeMethodを呼び出しているメソッドに責任を転嫁するため,throws節 でIOException を投げると宣言しましょう.

1文字単位で書き込む場合は,Writer型のwriteメソッドを利用してください.write メソッドにInteger型の値を渡せば適切な出力先に書き込まれます. 1文字単位の読み込みで取得した Integer型の値を渡すのが典型的な使い方でしょう.

例題2. 指定された行数を出力するコマンド

ここでは,ファイルに値を書き出してみましょう.クラス名をOutputNとし, コマンドライン引数で数字とファイル名を受け取ってください. コマンドライン引数で受け取った数字を1から順にカウントアップして指定行数を 指定されたファイルに出力してください.

実行例

$ ls             # 出力ファイルがないことを確認する.
OutputN.java      OutputN.class
$ java OutputN 3 file3.txt # file3.txt に書き込む.
$ ls             # file3.txt が作成されたことを確認する.
OutputN.java      OutputN.class        file3.txt
$ cat file3.txt  # file3.txt の内容を確認する.
1
2
3
$ java OutputN 10 file10.txt # file10.txt に書き込む.
$ ls             # 新たに file10.txt が作成されたことを確認する.
OutputN.java      OutputN.class        file3.txt      file10.txt
$ cat file10.txt # file10.txt の内容を確認する.
1
2
...途中省略
9
10
  • 最初は何もファイルがありません.
  • java OutputN 3 file3.txt を実行して,file3.txt に値を書き込んでいます.
    • OutputNの実行時に3が渡されていますので,1, 2, 3とカウントアップした値が各行に出力されています.
    • cat file3.txtで内容の確認をしています.
  • java OutputN 10 file10.txt を実行して,file10.txt に値を書き込んでいます.
    • cat file10.txtで内容の確認をしています.
例題1の解答例