Java OutputStreamWriter完全ガイド:文字からバイトへの変換と実践例
Java OutputStreamWriterクラス
JavaのOutputStreamWriterを使用して文字ストリームとバイトストリームを橋渡しする方法を、実例コードスニペットで解説します。
java.ioのOutputStreamWriterクラスは、文字データをバイトデータに変換するブリッジとして機能します。抽象Writerクラスを拡張し、FileOutputStreamなどのバイトストリームと連携します。
Unicode文字の一部は複数バイトにまたがるため、OutputStreamWriterはバイトストリームへの書き込み時に文字エンコーディングが正しく適用されることを保証します。
OutputStreamWriterの作成
必要なクラスをインポート:
import java.io.OutputStreamWriter;
import java.io.FileOutputStream;
import java.nio.charset.Charset;
ファイルをターゲットとするFileOutputStreamをインスタンス化し、OutputStreamWriterでラップします。デフォルトコンストラクタはプラットフォームのデフォルトcharsetを使用しますが、環境間の一貫性のためにUTF-8やUTF-16を明示的に設定できます:
// デフォルトcharset
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt"));
// 明示的UTF-8
OutputStreamWriter writerUtf8 = new OutputStreamWriter(
new FileOutputStream("output_utf8.txt"), Charset.forName("UTF-8"));
OutputStreamWriterの主要メソッド
OutputStreamWriterはWriterからのすべての抽象メソッドを実装。最も一般的なメソッド:
write()メソッド
write(int c)– 1文字書き込みwrite(char[] cbuf)– 文字配列を書き込みwrite(String str)– 文字列を書き込み
例:テキストをファイルに書き込み
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) {
String data = "This is a line of text inside the file.";
try {
FileOutputStream fileOut = new FileOutputStream("output.txt");
OutputStreamWriter writer = new OutputStreamWriter(fileOut, Charset.forName("UTF-8"));
writer.write(data);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
このプログラムを実行すると、output.txtが作成され以下が含まれます:
This is a line of text inside the file.
getEncoding()メソッド
getEncoding()で現在使用中のcharsetを取得:
FileOutputStream file = new FileOutputStream("output.txt");
OutputStreamWriter defaultWriter = new OutputStreamWriter(file);
OutputStreamWriter utf8Writer = new OutputStreamWriter(file, Charset.forName("UTF-8"));
System.out.println("デフォルトエンコーディング: " + defaultWriter.getEncoding());
System.out.println("UTF-8エンコーディング: " + utf8Writer.getEncoding());
出力
デフォルトエンコーディング: Cp1252 UTF-8エンコーディング: UTF-8
charset未指定時はプラットフォームデフォルトが返されます。明示的にcharsetを設定すると一貫した動作が保証されます。
ヒント: 精密な制御にはCharset.forName()を使用。詳細は公式Java Charset APIを参照。
close()メソッド
システムリソースを解放するために常にclose()を呼び出します。閉じた後はライターを再利用できません。
その他の便利なメソッド
| メソッド | 説明 |
|---|---|
flush() | バッファされたデータを即座に基盤ストリームに書き出し |
append() | 文字や文字列をライターに便利に追加 |
完全なリファレンスは公式Java OutputStreamWriter Javadocを参照。
Java
- Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
- Java instanceof演算子完全ガイド:基本から継承・インターフェースまで
- Java継承のマスター:概念、種類、実践例
- Java Staticネストクラスの理解:用法、違い、実例
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Javaシングルトンパターン完全解説:安全な実装と活用法
- Javaリフレクション完全ガイド:実行時のクラス・メソッド・フィールド検査
- Java ArrayList完全マスター:操作・メソッド・ベストプラクティス
- Java ObjectOutputStream完全ガイド:シリアル化、メソッド、実践例
- Javaジェネリクス完全ガイド:再利用可能で型安全なコードの構築
- Javaファイル操作のマスター:java.ioによる作成・読み取り・書き込み・削除