Java_FileReader の変更点 - アールメカブ

アールメカブ


Java_FileReader の変更点


#contents

* FileInputStream を使った iso-8859-1 の補足 2005 09 16 [#j5aa48b5]

 class iso8859 {
   public static void main(String[] args) {
    try {
        FileInputStream is = new FileInputStream("file.txt");
        InputStreamReader in = new InputStreamReader(is, 
         "ISO-8859-1");
         int ch;
         while ((ch = in.read()) != -1) {
               System.out.print(Integer.toHexString(ch) + " ");
               if(ch == 0xe4){// aウムラウトを補足
             	System.out.print("← a-umlaut ");
                }
            }
           in.close();
        } catch (IOException e) {
            System.out.println(e);
        }
     }
  }


* FileReader と文字コード [#bbe49ae5]

出典不明

FileReader/FileWriter(BufferedReader/BufferedWriter)クラス用いた場合、
テキストファイルの文字コードはシステムデフォルトの文字コードが使用されている
と自動的に判定されてしまいます。

つまり、Windows環境であれば、自動的にShift_JISと見なされてしまうわけです。
ですが実際には異なる文字コードのファイルを読み込みたい、
書き込みたいというケースもあるでしょう。

 その場合には、FileReaderクラスの代わりに
FileInputStream/InputStreamReaderクラスを、
FileWriterクラスの代わりにFileOutputStream/OutputStreamWriterクラスを、
それぞれ用いる必要があります。

■解説

FileInputStream/InputStreamReaderクラス、
またはFileOutputStream/OutputStreamWriterクラスを使用した場合にも、
異なるのはファイルを開く個所の記述だけです。
いずれの場合もバッファリング機能を持つBufferedReader/BufferedWriterクラスを
介すので、実際の読み込み(書き込み)処理の部分はなんら変わりありません。


読み込み処理(EUCの例)

 InputStreamReader objIsr=new InputStreamReader(
  new  
 FileInputStream(application.getRealPath("access.log")),"EUC-JP");
 BufferedReader objBr=new BufferedReader(objIsr,10);

書き込み処理(EUCの例)

 OutputStreamWriter objOsr=new OutputStreamWriter(
  new
 FileOutputStream(application.getRealPath("access.log")),"EUC-JP");
 BufferedWriter objBw=new BufferedWriter(objOsr,10);

InputStreamReader/OutputStreamWriterクラスは、
いずれもバイトデータとしてファイルを読み込むためのクラスです。
つまり、いったんバイトデータとして取得したデータを、
InputStreamReader/OutputStreamWriterクラスで
文字列に再構成しているというわけです。
上の例を見てもお分かりのように、InputStreamReader/OutputStreamWriterクラスでは
文字データを構成する際に使用する文字エンコーディングを指定することができるので
さまざまな文字コードに対応できるというわけです。