様々なクラス③:PrintWriterクラス
PrintWriterクラス
PrintWriterとは
PrintWriterクラスは、書き込みに特化したクラスです。System.out.println()で使い慣れたprint()・println()メソッドが使える他、書式付き出力を行うprintf()メソッドも備えています。BufferedWriterをラップして使うことで、効率的なファイル書き込みができます。
サンプルプログラム
ClassSample1.java
package class3;
import java.io.*;
public class ClassSample1 {
public static void main(String[] args) {
PrintWriter pw = null;
try {
pw = new PrintWriter(new BufferedWriter(new FileWriter("test.txt")));
} catch (IOException e) {
e.printStackTrace();
}
pw.print("printによる出力(改行なし):");
pw.println("printlnによる出力(改行あり)");
pw.printf("printfによる出力 %s",5);
System.out.println("Data Writing Finished.");
pw.close();
}
}
Data Writing Finished.
コンソールには「Data Writing Finished.」のみ表示されます。print/println/printfの出力はtest.txtに書き込まれます。(図3-1)
図3-1:test.txtの中身
PrintWriterクラスとflush()
flush()による確実な書き込み
PrintWriterにはバッファがあるため、flush()を呼ばないとデータがファイルに書き出されない場合があります。
ClassSample2.java
package class3;
import java.io.*;
public class ClassSample2 {
public static void main(String[] args) {
PrintWriter pw = null;
try {
pw = new PrintWriter(new BufferedWriter(new FileWriter("test2.txt")));
} catch (IOException e) {
e.printStackTrace();
}
pw.println("Line1");
pw.println("Line2");
pw.flush();
System.out.println("Data Writing Finished.");
//pw.close();
}
}
Data Writing Finished.
close()をコメントアウトしていますが、flush()を呼んでいるためLine1・Line2はファイルに書き出されます。(図3-2)
図3-2:test2.txtの中身
PrintWriterクラスの自動flush処理
コンストラクタで自動flushを有効にする
PrintWriterのコンストラクタの第2引数にtrueを指定すると、println()が呼ばれるたびに自動的にflush()が実行されます。
自動flush処理の設定
pw = new PrintWriter(new BufferedWriter(new FileWriter("test.txt")), true);
この設定を行うと、flush()を明示的に呼び出さなくてもprintln()の都度データがファイルに書き出されます。