年収アップ無料転職カウンセリング実施中! | 転職エージェントはマイナビエージェント

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

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)に変換します。それぞれのクラスで利用できるメソッドは、以下の通りです。

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

たとえば以下はsample.jpgを読み込み、その内容をそのままsample2.jpgに書きだす例です。

StreamBinary.java

package com.example.mynavi.stream;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class StreamBinary {
  public static void main(String[] args) {
    try (FileInputStream in = new FileInputStream("C:/data/sample.jpg");
        FileOutputStream out = new FileOutputStream("C:/data/sample2.jpg")) {
      int data;
      while ((data = in.read()) != -1) {
        out.write((byte) data);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

FileInputStream/FileOutputStreamコンストラクターで操作対象のパスを指定することで、それぞれファイルを読み取り/書き込み専用で開けます。
ファイルからバイトデータを読み込むにはreadメソッドを利用します。readメソッドは、読み込みに成功した場合はその値を、読み込むべきデータがなかった場合には-1を返します。上では、その性質を利用して、readメソッドが-1を返すまでwhileループを繰り返すことで、ファイルの内容をすべて読み込めます。
バイトデータは、writeメソッドを利用することで、対象のファイルに書き込みます。

note

try-with-resource構文
ファイルなど共有のリソースを利用する際には、tryブロック直後のカッコで宣言します。これによって、リソースはtryブロックを抜けるタイミングで自動的に解放されますので、いわゆる「ファイルの閉じ忘れ」を防げます。この構文は、JavaSE 7で新たに追加された構文で、try-with-resources構文と呼ばれます。

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

年収アップ無料転職カウンセリング実施中! | 転職エージェントはマイナビエージェント

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職