InputStreamReaderとOutputStreamWriterの役割

  • それぞれバイト列ストリームから他の文字列ストリーム(Reader/Writer系)へ変換するための橋渡しをする
  • java.nio.charset.Charset によるエンコーディング指定が出来る
  • ファイルの読み書きだけにおいては、 FileReader/ FileWriter の便利系クラスが用意されている

InputStreamReader 例

ファイルを読み込む

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.charset.Charset;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;

class ファイルを読み込む {
        public static void main(String[] args) { 
                // バイト列ストリームから生成し、文字列ストリームに橋渡しする
                try (InputStream in = Files.newInputStream(Path.of("テスト仕様書.md"));
                                InputStreamReader is = new InputStreamReader(in, Charset.forName("UTF-8"));
                                BufferedReader br = new BufferedReader(is)) {
                        while (br.ready()) {
                                System.out.println(br.readLine());
                        }
                } catch (IOException ex) {
                        ex.printStackTrace();
                } finally {
                        System.out.println("DONE");
                }
        }
}

OutputStreamWriter 例

ファイルに書き込む

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.charset.Charset;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

class ファイルに書き込む  {
        public static void main(String[] args) { 
                // バイト列ストリームから生成し、文字列ストリームに橋渡しする
                try (OutputStream os = Files.newOutputStream(Path.of("Hello.txt"));
                                OutputStreamWriter ow = new OutputStreamWriter(os, Charset.forName("UTF-8"));
                                        PrintWriter pw = new PrintWriter(ow)) {
                                
                        pw.format("私は偉大な%sだ", "(@@@)");
                        pw.flush();
                } catch (IOException ex) {
                } finally {
                        System.out.println("Done");
                }
        }
}