KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

Javaの入出力について学ぶ

「Javaプログラミング技法」の第14回目の授業内容まとめになります。

※前回授業の内容はこちら

www.kato-eng.info

入出力とは

  • 入力 Input
    • ファイルやデバイス、ネットワークからデータを読み込むこと
  • 出力 Output
    • ファイルやデバイス、ネットワークにデータを書き込むこと

ストリーム

ストリームとはデータを1本の流れとして捉えたもの。

f:id:masayuki_kato:20170804001803p:plain

入力ではデータを流れとして読み込み、出力ではデータを流れとして書き込む。

f:id:masayuki_kato:20170804001949p:plain

Javaにはバイト(Byte)単位で入出力をするバイトストリームと、文字(char、2byte)単位で入出力する文字ストリームがある。

キーボードからの入力

キーボードからデータを入力するには下記の手順をとる。

  1. キーボードからデータを読み込むストリームをつくる
  2. ストリームからデータを読み込む
  3. 読み込んだデータを処理する
// KeyboardInputOutput.java

import java.io.*;

public class KeyboardInputOutput {

    // readLine()を呼び出したときにIOExceptionが発生する可能性がある。
    // この例外をmain内部でcatchしない代わりにmainそのものをthrows宣言している。
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // キーボードから文字データを1行まとめて読み込み、変数strに格納する
        String str = br.readLine();
        System.out.println(str);
    }
}

InputStreamReader

InputStreamReaderは読み込んだバイト列のデータを指定した文字コードで文字に変換して出力するストリーム。

f:id:masayuki_kato:20170804215526p:plain

BufferedReader

BufferedReaderは文字をまとめて読み込むストリーム。

f:id:masayuki_kato:20170804215716p:plain

ファイルからの入力

ファイルからデータを入力するには下記の手順をとる。

  1. ファイルから読み込むストリームを作る
  2. ストリームからデータを読み込む
  3. ストリームを閉じる
  4. 読み込んだデータを処理する
// FileInput.java

import java.io.*;

public class FileInput {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            // filename.txtから文字を読み込む、文字入力ストリームを作成する
            br = new BufferedReader(new FileReader("filename.txt"));

            // ファイルの内容を1行読み込む
            String str = br.readLine();
            System.out.println(str);

            // ファイルを閉じる
            br.close();
        } catch (IOException e) {
            // FileReaderはIOExceptionをthrowするのでcatchブロックを記述する
            System.out.println("エラーが発生しました");
        } finally {
            try {
                // tryブロックで例外が発生した際に、ファイルを閉じる処理
                br.close();
            } catch (IOException e) {
                System.out.println("ファイルクローズ時にエラーが発生しました");
            }
        }
    }
}

FileReader

FileReaderはファイルからデータを文字として読み込む入力ストリーム。

f:id:masayuki_kato:20170804221135p:plain

ファイルへの出力

ファイルへデータを書き込む手順は下記の通り。

  1. ファイルへ書き出すストリームを作る
  2. 書き込むデータを用意する
  3. ストリームへデータを書き込む
  4. ストリームを閉じる
// FileOutput.java

import java.io.*;

public class FileOutput {
    public static void main(String[] args) {
        PrintWriter pw = null;
        try {
            // target.txtへ文字を書き込む文字出力ストリームを作成する
            pw = new PrintWriter(new BufferedWriter(new FileWriter("target.txt")));

            // ファイルに文字を1行書き込む
            pw.println("ABC");
            // ファイルを閉じる
            pw.close();
        } catch (IOException e) {
            System.out.println("ファイル出力エラー");
        } finally {
            // tryブロックで例外が発生した際にファイルを閉じる処理
            pw.close();
        }
    }
}

FileWriter

FileWriterはファイルへデータを文字として書き込む出力ストリーム。

f:id:masayuki_kato:20170804224810p:plain