株式会社イーヴ

EeBlog(テクニカルブログ)

TOP > EeBlog > 第94回 入出力の基本

第94回 入出力の基本

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

前回はテキストファイルにバイトストリームから書き込みました。
ファイルの文字セットがプラットフォームのデフォルトの文字セットと異なる場合、書き込む内容を符号化するのに文字セットを指定する必要がありました。
そこで今回は、文字を符号化しつつ、バイトストリームに書き込む方法について見ていきたいと思います。


次のサンプルコードは、テキストファイルに書き込むプログラムです。
前々回に作成した、CSVファイルに追記します。


 import java.io.BufferedWriter;
 import java.io.FileOutputStream;
 import java.io.OutputStreamWriter;
 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 List staffList = new LinkedList();
     static {
         staffList.add(new Object[] { "100006", "イーブ六郎", "総務部" });
         staffList.add(new Object[] { "100007", "イーブ七郎", "経理部" });
         staffList.add(new Object[] { "100008", "イーブ八郎", "人事部" });
         staffList.add(new Object[] { "100009", "イーブ九郎", "開発部" });
         staffList.add(new Object[] { "100010", "イーブ十郎", "営業部" });
     }


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

OutputStreamWriterクラスは文字を符号化する機能を、出力バイトストリームに追加します。
符号化するための文字セットはコンストラクタで指定します。
あとは、OutputStreamWriterクラスはWriterクラスを継承しているので、文字ストリームに書き込むのと同じように書き込むことができます。