テキストファイルの操作 – 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
- package com.example.mynavi.stream;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- public class StreamTrans {
- public static void main(String[] args) {
- try (var reader = new InputStreamReader(
- new FileInputStream("C:/data/sample.txt"), "UTF-8");
- var writer = new OutputStreamWriter(
- new FileOutputStream("C:/data/sample2.txt"), "UTF-8")) {
- int data;
-
while ((data = reader.read()) != -1) { - writer.write(data);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
テキストファイルを読み書きする簡易な手段として、他に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万部を超える。