出力を扱うWriter
を利用する方法を確認しましょう.Writer
型もReader
型と同じく,
多くの型が存在します.典型的な型を次に紹介します.
FileWriter
File
型)に書き込むためのWriter
型.PrintWriter
printf
やprintln
,print
が利用できるWriter
型.
Writer
型は文字単位でしか出力できない.StringWriter
String
型)に書き込むためのWriter
型.OutputStreamWriter
OutputStream
型をWriter
型に変換するためのWriter
型.ここに挙げた以外にもいくつかのWriter
型が存在しますが,この講義では,FileWriter
,
PrintWriter
の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
型を構築します.
次に,構築したFileWriter
をPrintWriter
に渡し,文字列の出力が
可能なPrintWriter
を構築します.
そして,文字列をファイルに書き込むには,PrintWriter
型の変数out
に対してprint
メソッドを呼び出して,文字列を書き込んでいます.
他に,println
やprintf
メソッドも用意されています.
最後に,これ以上ストリームを利用しないため,close
メソッドを呼び出しています.close
メソッドを
呼び出すと,ラップされているFileWriter
も閉じられます.
読み込み時と同じように,IOException
の例外に対応しなければいけません.
ここでも同じように,writeMethod
を呼び出しているメソッドに責任を転嫁するため,throws
節
でIOException
を投げると宣言しましょう.
1文字単位で書き込む場合は,Writer
型のwrite
メソッドを利用してください.write
メソッドにInteger
型の値を渡せば適切な出力先に書き込まれます.
1文字単位の読み込みで取得した Integer
型の値を渡すのが典型的な使い方でしょう.
ここでは,ファイルに値を書き出してみましょう.クラス名を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
で内容の確認をしています.