EeBlog(テクニカルブログ)

第92回 入出力の基本

引き続き「入出力の基本」について見ていきたいと思います。

今回からは出力ストリームについて見ていきたいと思います。

出力装置への出力は、出力ストリームに書き込み、フラッシュすることによって行います。
フラッシュを行うためのflushメソッドは、Writerクラスのサブクラス、OutputStreamクラスで実装されています。
また、バッファがいっぱいになったり、ストリームを閉じることでも、自動的にフラッシュが行われるようになっています。

次のサンプルコードは、テキストファイルに書き込むプログラムです。
ファイルはCSVファイルにします。(J2SE5.0以上)

 import java.io.BufferedWriter;
 import java.io.FileWriter;
 import java.io.PrintWriter;
 import java.util.LinkedList;
 import java.util.List;


 public class Main {


     private static final String CSV_FORMAT = "%1$s,%2$s,%3$s" 
                         + System.getProperty("line.separator");
     private static final Object[] COLUMNS = { "社員番号", "社員氏名", "部署" };
     private static List staffList = new LinkedList();
     static {
         staffList.add(new Object[] { "100001", "イーブ太郎", "総務部" });
         staffList.add(new Object[] { "100002", "イーブ次郎", "経理部" });
         staffList.add(new Object[] { "100003", "イーブ三郎", "人事部" });
         staffList.add(new Object[] { "100004", "イーブ四郎", "開発部" });
         staffList.add(new Object[] { "100005", "イーブ五郎", "営業部" });
     }


     public static void main(String[] args) {
         PrintWriter printWriter = null;
         try {
             printWriter = new PrintWriter(new BufferedWriter
                       (new FileWriter("output.csv")));
             printWriter.printf(CSV_FORMAT, COLUMNS);
             for (Object[] staff : staffList) {
                 printWriter.printf(CSV_FORMAT, staff);
             }
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
             if (printWriter != null) {
                 try {
                     printWriter.close();
                 } catch (Exception e) {}
             }
         }
     }
 }

FileWriterクラスはファイルの文字ストリームに書き込むためのクラスです。
BufferedWriterクラスはバッファリングすることによって、文字ストリームに効率良く書き込むためのクラスです。
PrintWriterクラスにはオブジェクトをフォーマットし、文字ストリームに書き込む機能があります。
今回はデータをカンマで区切って出力するので、printfメソッドでフォーマットして出力しています。