目次へ

2.3. java.io.InputStreamReader, java.io.OutputStreamWriter

「InputStreamReader」はバイト入力ストリームを文字入力ストリームへ、「OutputStreamWriter」はバイト出力ストリームを文字出力ストリームへ変換する入出力クラスです。具体的には「InputStreamReader」は指定の文字コードをUnicodeへ変換して入力、「OutputStreamWriter」はUnicodeを指定の文字コードへ変換して出力します。「FileReader」「FileWriter」はOSのデフォルトの文字コードを対象としますから、それ以外の文字コードを扱いたい場合に、これらのクラスを使用します。以下は「EUC-JP」で書かれたテキストファイルを、「Shift_JIS」へ変換してコピーするプログラムです。

BufferedReader reader
  =new BufferedReader(new InputStreamReader(new FileInputStream("euc.txt"),"EUC_JP"));
BufferedWriter writer
  =new BufferedWriter(new OutputStreamWriter(new FileOutputStream("sjis.txt"),"SJIS"));
String line;
while((line=reader.readLine())!=null){
  writer.write(line);
  writer.newLine();
}
writer.flush();
writer.close();
reader.close();

「InputStreamReader」のコンストラクタの第1引数は「InputStream」オブジェクト、第2引数は文字コードを示す文字列です。「OutputStreamWriter」のコンストラクタの第1引数は「OutputStream」オブジェクトで、第2引数は同じです。共に第2引数を省略した場合は、OSのデフォルトの文字コードが使用されます。

Javaでどのようなエンコーディングがサポートされているかについては、JDKのドキュメント「国際化」の章を参考にして下さい。

(実習課題3)

実習課題2のプログラムを改良しなさい。

  • 画像ファイルのコピーだった機能を、指定の文字コードで書かれたテキストファイルを指定の文字コードに変換してコピーする機能に変えなさい。
  • ファイルの拡張子は「.txt」。
  • サポートする文字コードは「EUC_JP」「SJIS」「ISO2022JP」の3つで良い。

解答例はこちら

2.4. java.io.PushbackReader, java.io.PushbackInputStream

これまでの入力ストリームは一方向に読み込んでいくだけで、一度読み込んだデータを戻して読み直す事はできません。「PushbackReader」は文字ストリーム系で、「PushbackInputStream」はバイトストリーム系で上記の機能を実現するフィルタ系入力クラスです。

 PushbackReader reader=new PushbackReader(new FileReader("input.txt"),512);
 BufferedWriter writer=new BufferedWriter(new FileWriter("output.txt"));
 char buf[]=new char[256];
 int len;
 while((len=reader.read(buf))!=-1){
   writer.write(buf,0,len);
   reader.unread(buf,0,len/2);
 }
 writer.flush();
writer.close();
reader.close();

1行目で「PushbackReader」の入力ストリームを作成しています。コンストラクタの引数は「Reader」クラスで、これのサブクラスである入力クラスであれば問題ありません。2つ目の引数は「PushbackReader」で使用するバッファのサイズです。戻されるデータのサイズより大きくする必要があります。5行目でデータの読み込みをしていますが、この方法は「FileReader」と同じです。「PushbackReader」の特徴は7行目の「unread」メソッドです。このメソッドで、引数に指定されたデータを入力ストリームに戻されます。戻されたデータは再度、「read」メソッドで読み込む事ができます。

(実習課題4)

以下のプログラムを作成しなさい。

  • プログラムの実行時に指定したファイルを読み込み、その内容をコンソールに表示する事。
  • 3文字読み込んでは、2文字戻すようにする事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ