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