テキストファイルの入出力でさまざまな文字コードを扱うJavaTips 〜JSP/サーブレット編

» 2003年12月16日 10時00分 公開
[山田祥寛@IT]

 「サーブレットでテキストファイルから読み込みを行う」「サーブレットでテキストファイルに書き込みを行う」では、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クラスでは文字データを構成する際に使用する文字エンコーディングを指定することができるので、さまざまな文字コードに対応できるというわけです。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。