- 追加された行はこの色です。
- 削除された行はこの色です。
FileReader と文字コード
* FileReader と文字コード [#bbe49ae5]
出典不明
>
FileReader/FileWriter(BufferedReader/BufferedWriter)クラス用いた場合、
テキストファイルの文字コードはシステムデフォルトの文字コードが使用されている
と自動的に判定されてしまいます。
つまり、Windows環境であれば、自動的にShift_JISと見なされてしまうわけです。
ですが実際には異なる文字コードのファイルを読み込みたい、
書き込みたいというケースもあるでしょう。
その場合には、FileReaderクラスの代わりに
FileInputStream/InputStreamReaderクラスを、
FileWriterクラスの代わりにFileOutputStream/OutputStreamWriterクラスを、
それぞれ用いる必要があります。
■解説
FileInputStream/InputStreamReaderクラス、
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);
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);
OutputStreamWriter objOsr=new OutputStreamWriter(
new
FileOutputStream(application.getRealPath("access.log")),"EUC-JP");
BufferedWriter objBw=new BufferedWriter(objOsr,10);
InputStreamReader/OutputStreamWriterクラスは、
InputStreamReader/OutputStreamWriterクラスは、
いずれもバイトデータとしてファイルを読み込むためのクラスです。
つまり、いったんバイトデータとして取得したデータを、
InputStreamReader/OutputStreamWriterクラスで
文字列に再構成しているというわけです。
上の例を見てもお分かりのように、InputStreamReader/OutputStreamWriterクラスでは
文字データを構成する際に使用する文字エンコーディングを指定することができるので
さまざまな文字コードに対応できるというわけです。
<