注目記事

【Javaコード入門】ストリーム_③InputStreamReader/OutputStreamWriterクラス

テキストファイルの操作 – InputStreamReader/OutputStreamWriterクラス

InputStreamReader(InputStream in [,String char])
OutputStreamWriter(OutputStream out [,String char])
 in:入力ストリーム
 out:出力ストリーム
 char:文字コード(UTF-8、EUC_JP、Windows-31J(Shift-JIS)など)

テキストファイルを読み書きするには、FileInputStream/FileOutputStreamクラスをInputStreamReader/OutputStreamWriterクラスで文字ストリーム(Reader/Writer)に変換します。それぞれのクラスで利用できるメソッドは、以下の通りです。

InputStreamReader/OutputStreamWriterクラスの主なメソッド
クラス メソッド 概要
InputStreamReader int read([char[​] c ,int off, int len]) 入力ストリームから文字配列cに読み込み(offは開始位置、lenは読み込み長)
long skip(long n) 読み込みをnバイトだけスキップ
void close() ストリームを閉じる
OutputStreamWriter void write(char[​] c [,int off, int len]) 文字配列cの内容を出力ストリームに書き出し(offは開始位置、lenは読み込み長)
void write(String str [,int off, int len]) 文字列strの内容を出力ストリームに書き出し(offは開始位置、lenは読み込み長)
void close() ストリームを閉じる

文字ストリームを取得できてしまえば、あとはread/writeメソッドで読み書きする流れは、先ほどと同じです。たとえば以下は、テキストファイルsample.txtの内容をsample2.txtに転記する例です。

StreamTrans.java
  1. package com.example.mynavi.stream;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8.  
  9. public class StreamTrans {
  10.   public static void main(String[] args) {
  11.     try (var reader = new InputStreamReader(
  12.              new FileInputStream("C:/data/sample.txt"), "UTF-8");
  13.          var writer = new OutputStreamWriter(
  14.            new FileOutputStream("C:/data/sample2.txt"), "UTF-8")) {
  15.       int data;
  16.       while ((data = reader.read()) != -1) {
  17.         writer.write(data);
  18.       }
  19.     } catch (IOException e) {
  20.       e.printStackTrace();
  21.     }
  22.   }
  23. }

テキストファイルを読み書きする簡易な手段として、他にFileReader/FileWriterというクラスも用意されています。ただし、これらのクラスでは、文字コードはプラットフォーム標準のもので固定となります。
アプリケーションの可搬性などを考慮するならば、InputStreamReader/OutputStreamWriterクラスを優先して利用してください。

ストリーム_目次
ストリーム
FileInputStream/FileOutputStreamクラス
InputStreamReader/OutputStreamWriterクラス
BufferedReader/BufferedWriterクラス
ObjectInputStream/ObjectOutputStreamクラス
Fileクラス

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。