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"); } } }