出力を扱う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で内容の確認をしています.import java.io.*;
public class OutputN{
void run(String[] args) throws IOException{
Integer max = new Integer(args[0]);
PrintWriter out = new PrintWriter(new FileWriter(new File(args[1])));
for(Integer i = 1; i <= max; i++){
out.println(i);
}
out.close();
}
public static void main(String[] args) throws IOException{
OutputN output = new OutputN();
output.run(args);
}
}