Java_FileReader のバックアップ(No.1) - アールメカブ

アールメカブ


Java_FileReader のバックアップ(No.1)


FileReader? と文字コード

出典不明

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?クラスでは 文字データを構成する際に使用する文字エンコーディングを指定することができるので さまざまな文字コードに対応できるというわけです。