OutputStreamWriterクラス - 萌えJava超入門
テキストファイルに書き込む

OutputStreamWriterクラス

文字をバイトにエンコードして、OutputStreamへ渡します。
主に BufferedWriterの引数として使用します。

java.io.OutputStreamWriter

Point
次のページに紹介する BufferedWriter を併用することで、
変換効率が向上します。

目次

1.概要


文字をバイトにエンコードして、OutputStreamへ渡します。

効率的なエンコードのために、BufferedWriterクラスを併用するのが一般的ですが、
このページでは説明のため、OutputStreamWriterクラスをそのまま使ってみます。
(BufferedWriterクラスは、次のページで扱います。)

萌えJava超入門
結果をお急ぎの方は
このページを飛ばして
BufferedWriterに進んでもいいよ。
萌えJava超入門 萌えJava超入門
え~!


2.継承関係


萌えJava超入門 萌えJava超入門
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"

コンストラクタ 書式
OutputStream out;
String charsetName;
 OutputStreamWriter writer
      = new OutputStreamWriter(out, charsetName);
import java.io.OutputStreamWriter; が必要です。

例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import UnsupportedEncodingException;




4. writeメソッド


萌えJava超入門
このメソッドは BufferedWriterクラスに
ラップされるので、軽く流して大丈夫。
第一引数に与えられた文字列の一部を書き込みます。
具体的には 0始まりで off番目の文字から、len文字を書き込みます。

 public void write(String str, int off, int len)
                   throws IOException

writeメソッド 書式
OutputStreamWriter writer;
String str;
int off;
int len;
     writer.write(str, off, len);

例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import IOException;




5. closeメソッド


引数に与えた OutputStream# を閉じてリソースを解放します。
書き込みが終わったら必ず closeします。

OutputStreamWriterで close()すれば、
あらためて OutputStream#.close() を呼び出す必要はありません。

 public void close() throws IOException

closeメソッド 書式
OutputStreamWriter writer;
         writer.close();

例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import IOException;




5.サンプルコード


それでは実際に使ってみましょう。
OutputStreamWriterの writeメソッドは、引数が多くて面倒ですが、実践で使うことはほとんどないので気にしません。
hello.txt というファイルに 日本語を含む文字列を書き込みます。
OutputStreamWriterが、適切にエンコードしてくれるので、日本語でも問題ありません。

萌えJava超入門
ここはサラッと行こう。
//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」ファイルができていると思います。
中身を確認してみて下さい。
萌えJava超入門 萌えJava超入門 萌えJava超入門
じゃじゃ~ん!



お疲れ様でした。




© 2019 awasekagami