テキストファイルに書き込む
OutputStreamWriterクラス
文字をバイトにエンコードして、OutputStreamへ渡します。
主に BufferedWriterの引数として使用します。
java.io.OutputStreamWriter
Point
次のページに紹介する BufferedWriter を併用することで、
変換効率が向上します。
目次
1.概要
文字をバイトにエンコードして、OutputStreamへ渡します。
効率的なエンコードのために、BufferedWriterクラスを併用するのが一般的ですが、
このページでは説明のため、OutputStreamWriterクラスをそのまま使ってみます。
(BufferedWriterクラスは、次のページで扱います。)
結果をお急ぎの方は
このページを飛ばして
BufferedWriterに進んでもいいよ。
え~!
2.継承関係
Writerの仲間
ってことっすね。
OutputStreamWriterの継承関係
java.io.Writer 抽象クラス
|
└ java.io.OutputStreamWriter クラス
重要
OutputStream を テキストとして解釈(Write)します。
3. コンストラクタ
引数に、OutputStream のインスタンスを与えます。
この章では、ファイルへの出力を行いますので、
OutputStream のサブクラスである FileOutputStreamクラスを使用します。
OutputStreamWriter は、与えられた OutputStream を、文字として解釈します。
文字コードが複数バイトの場合でも適切に対応してくれます。
また、コンストラクタの第二引数に文字コードを指定することが可能です。
public OutputStreamWriter(OutputStream out)
public OutputStreamWriter(
OutputStream out,
String charsetName
)
throws UnsupportedEncodingException
第二引数に、文字コードを指定すると、指定した文字コードでの出力ができます。
基本的にはこちらの書式を使おうと思います。
charsetName の例
- "UTF-8"
- "MS932"
例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import UnsupportedEncodingException;
4. writeメソッド
このメソッドは BufferedWriterクラスに
ラップされるので、軽く流して大丈夫。
第一引数に与えられた文字列の一部を書き込みます。
具体的には 0始まりで off番目の文字から、len文字を書き込みます。
public void write(String str, int off, int len)
throws IOException
例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import IOException;
5. closeメソッド
引数に与えた OutputStream# を閉じてリソースを解放します。
書き込みが終わったら必ず closeします。
OutputStreamWriterで close()すれば、
あらためて OutputStream#.close() を呼び出す必要はありません。
public void close() throws IOException
例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import IOException;
5.サンプルコード
それでは実際に使ってみましょう。
OutputStreamWriterの writeメソッドは、引数が多くて面倒ですが、実践で使うことはほとんどないので気にしません。
hello.txt というファイルに 日本語を含む文字列を書き込みます。
OutputStreamWriterが、適切にエンコードしてくれるので、日本語でも問題ありません。
ここはサラッと行こう。
//Sample05_01.java
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
class Sample05_01{
public static void main(String[] args){
String path = "hello.txt";
File file = new File(path);
try {
FileOutputStream outStream = new FileOutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(outStream, "UTF-8");
String str = "This is hello.txt\nこんにちは。\nend";
writer.write(str, 0, str.length());
writer.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
}
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample05_01.java
ws>java Sample05_01
Sample05_01.java を実行したフォルダに「hello.txt」ファイルができていると思います。
中身を確認してみて下さい。
じゃじゃ~ん!
お疲れ様でした。