【Java】UTF8のBOM付きファイルを生成する方法

java

UTF8のCSVファイルをエクセルで表示するには、ファイル先頭へ「BOM」を付ける必要があります。

当ページでは、UTF8ファイル作成時に、「BOM」を付ける方法を紹介ます。

[スポンサーリンク]

BOM付きファイルを生成する処理

わかりやすいように実際に動くソースから一部を抜粋しました。
ハイライトになっている部分が、ファイル先頭へBOMを付けている箇所です。

	// ファイル先頭にBOMを付けます。
	FileOutputStream os = new FileOutputStream(file);
	os.write(0xef);
	os.write(0xbb);
	os.write(0xbf);

BOM付きファイルを生成するサンプルソース

public static void main(String arg[]) {
	// カレントディレクトリのパスを取得します。
	String dir = System.getProperty("user.dir");

	// 出力したいファイル名を指定します。
	File file = new File(dir + "/test.txt");
	PrintWriter pw = null;

	try {
		FileOutputStream os = new FileOutputStream(file);
		os.write(0xef);
		os.write(0xbb);
		os.write(0xbf);

		pw = new PrintWriter(new OutputStreamWriter(os));

		pw.println("ひらがな");
		pw.println("カタカナ");
		System.out.println("ファイルの書き込みに成功しました!");
	} catch (IOException e) {
		System.out.println(e);
	} finally {
		if (pw != null) {
			pw.close();
		}
	}
}

実行結果

>実行結果
ファイルの書き込みに成功しました!

出力ファイル

Sakuraエディタ等で出力されたファイルを開いて下さい。
「UTF-8 BOM付」となっていれば、成功です。
utf8-file-bom1

さいごに

エクセルを使って、UTF8のCSVファイルを操作したいという要望は多いと思います。
BOM付け自体は簡単なロジックで対応できるのでしっかりおさえておきましょう。

BOM付きファイルをパース(読込む)時も、ファイル先頭にBOMがついているということを忘れずに処理して下さい。

UTF8のBOM付きファイルをエクセルで開く際はダブルクリックではなく、開き方の手順が必要です。エクセルについては当ページでは解説していません。別途Googleで検索してみてください。
それでは!