CSV ファイルへの書き込み

JavaCSV ファイルに書き込む際、普通に

BufferedWriter bw = new BufferedWriter(new FileWriter("newfile.csv"));

などとすると Unicode で書き込まれるので、できたファイルを Excel で読み込むと文字化けが発生する。これを回避する方法。

FileOutputStream fos = new FileOutputStream("newfile.csv");
OutputStreamWriter osw = new OutputStreamWriter(fos, "SJIS");
BufferedWriter bw = new BufferedWriter(osw);

とすると、バイトストリームから文字ストリームへの変換の際に文字コードも変換してくれる。ちなみに SJISShift_JIS の alias (Java 1.4.1 以降)。注意する点として、OutputStreamWriter のインスタンス化の際に UnsupportedEncodingException を処理しないといけない(ついでに FileOutputStream が FileNotFoundException を投げる可能性があるので、そちらも処理する必要あり。まとめて IOException で受け取る方法もあるにはあるが…)。当然、CSV ファイルから読み取るときも同じ要領で

FileInputStream fis = new FileInputStream("newfile.csv");
InputStreamReader isr = new InputStreamReader(fis, "SJIS");
BufferedReader br = new BufferedReader(isr);

とすればよい(例外処理も上記と同様)。