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