Javaに関する様々な情報をご紹介します。

1はじめての入出力

Javaに関する様々な情報をご紹介します。

はじめての入出力

このページではJavaでの入出力処理の概要について説明します。

入出力処理の概要

プログラムを作成する際、「あるファイルのデータを読み込み、別のファイルへ書き出す。」、「あるデータを読み込む際、データのフィルタ処理を行う。」、「あるデータの書き込みを、別のプログラムの入力値とする。」などと言った、入出力に関する処理を行います。Javaでは、それらの処理をjava.ioパッケージに含まれる様々なクラスで対応します。

入出力処理は概ね、以下の手順で行われます。

入力処理

  1. ソースに対し読み込みストリームを開く
    入力処理_1
  2. データがなくなるまで読み込む
    入力処理_2
  3. ソースに対し読み込みストリームを閉じる
    入力処理_3

出力処理

  1. ソースに対し書き込みストリームを開く
    出力処理_1
  2. データがなくなるまで書き込む
    出力処理_2
  3. ソースに対し書き込みストリームを閉じる
    出力処理_3

使用例

入出力処理の使用例を記載します。

【例1】ファイル(abc.txt)を読み込み、その内容を別のファイル(xyz.txt)へ書き込む処理です。

import java.io.*;

public class ExIO1 {
    public static void main(String[] args) {
        try {  //(1)
            //(2)Fileオブジェクトの生成
            File inFile = new File("abc.txt");
            //(3)Fileオブジェクトの生成
            File outFile = new File("xyz.txt");
            //(4)FileReaderクラスのオブジェクトの生成
            FileReader in = new FileReader(inFile);
            //(5)FileWriterクラスのオブジェクトの生成
            FileWriter out = new FileWriter(outFile);

            int contents;  //(6)

            //(7)読み込みデータがなくなるまで読み込み
            while ((contents = in.read()) != -1) {
                //(8)書き込むデータがなくなるまで書き込み
                out.write(contents);
            }

            in.close();  //(9)読み込みストリームを閉じる
            out.close( );  //(10)書き込みストリームを閉じる
        } catch(IOException e) {
        }
    }
} 

abc.txtファイル

これはabcファイルの中身です。

解説1

  1. (1)FileReaderオブジェクト・FileWriterオブジェクトの生成、readメソッド・writeメソッドの実行の際にチェック例外が発生するため、処理をtry節内に記述します。
  2. (2)読み込むファイル(abc.txt)のFileオブジェクトinFileを生成します。
  3. (3)書き込むファイル(xyz.txt)のFileオブジェクトoutFileを生成します。
  4. (4)FileReaderクラスのオブジェクトinを生成し、abc.txtに対し読み込みストリームを開きます。コンストラクタの引数にはinFileを指定します。
  5. (5)FileWriterクラスのオブジェクトoutを生成し、xyz.txtに対し書き込みストリームを開きます。コンストラクタの引数にはoutFileを指定します。
  6. (6)読み込まれたデータが格納されるint型変数contentsを宣言します。
  7. (7)readメソッドを使用し、abc.txt内のデータを1バイトづつ読み込みます。abc.txt内に読み込みデータがなくなると-1を返し、whileループを終了します。
  8. (8)writeメソッドを使用し、xyz.txt内に1バイトづつデータを書き込みます。
  9. (9)whileループを抜けた後(読み込みデータがなくなった後)、読み込みストリームを閉じます。
  10. (10)whileループを抜けた後(書き込みデータがなくなった後)、書き込みストリームを閉じます。

実行結果1

D:\JAVA>javac ExIO1.java

D:\JAVA>java ExIO1

D:\JAVA>type xyz.txt
これはabcファイルの中身です。

D:\JAVA>
※typeコマンドはMS-DOSコマンドで引数に指定されたファイルの中身を表示します。

入出力クラス

ここでは、入出力処理で使用するクラスについて説明します。入出力関係のクラスは大きく分けて文字ストリーム用のクラスとバイトストリーム用のクラスの2つに分けられます。文字ストリーム用のクラスはテキストデータなど16ビット文字の入出力に使用されます。バイトストリーム用のクラスは画像・圧縮データなどバイナリデータの入出力に使用されます。

文字ストリーム

役割 入力処理 出力処理
スーパークラス Reader Writer
文字ストリームの入力関連のabstractスーパークラスです。Readerクラス以下に様々なストリームに特化したサブクラスが継承されています。 文字ストリームの出力関連のabstractスーパークラスです。Writerクラス以下に様々なストリームに特化したサブクラスが継承されています。
バッファリング BufferedReader BufferedWriter
読み込みソースをバッファリングし効率的な処理を実現します。 書き込みソースをバッファリングし効率的な処理を実行します。
ライン LineNumberReader
読み込みの間に行番号を管理します。LineNumberReaderクラスはBufferedReaderクラスのサブクラスです。
配列 CharArrayReader CharArrayWriter
既存の配列よりデータを読み込む処理を行います。 既存の配列にデータを書き込む処理を行います。
ファイル FileReader FileWriter
ファイルの読み込み処理を行います。FileReaderクラスはInputStreamReaderクラスのサブクラスです。 ファイルへの書き込み処理を行います。FileWriterクラスはOutputSteramWriterクラスのサブクラスです。
フィルタ FilterReader FilterWriter
読み込むデータにフィルタ処理を施したい時に使用します。 書き込むデータにフィルタ処理を施したい時に使用します。
PushbackReader
読み込むデータの先読み処理を行います。PushbackReaderクラスはFilterReaderクラスのサブクラスです。
パイプ PipedReader PipedWriter
パイプ処理のうち入力関係の処理を行います。パイプ処理とはある処理の出力を別の処理の入力とする処理のことを言います。 パイプ処理のうち出力関係の処理を行います。パイプ処理とはある処理の出力を別の処理の入力とする処理のことを言います。
String StringReader StringWriter
メモリ内のStringから文字を読み込む処理を行います。 メモリ内のStringを書き出し、StringBufferに収集する処理を行います。
プリント PrintWriter
 印字出力用のメソッドが用意されています。

バイトストリーム

役割 入力処理 出力処理
スーパークラス InputStream OutputStream
バイトストリームの入力関連のabstarctスーパークラスです。InputStreamクラス以下に様々なストリームに特化したサブクラスが継承されています。 バイトストリームの出力関連のabstaractスーパークラスです。OutputStreamクラス以下に様々なストリームに特化したサブクラスが継承されています。
バッファリング BufferedInputStream BufferedOutputStream
読み込みソースをバッファリングし効率的な処理を実現します。BufferedInputStreamクラスはFilterInputStreamクラスのサブクラスです。 書き込みソースをバッファリングし効率的な処理を実現します。BufferedOutputStreamクラスはFilterOutputStreamクラスのサブクラスです。
ライン LineNumberInputStream
読み込みの間に行番号を管理します。LineNumberInputStreamクラスはFilterInputStreamクラスのサブクラスです。
配列 ByteArrayInputStream ByteArrayOutputStream
既存の配列よりデータを読み込む処理を行います。 既存の配列にデータを書き込み処理を行います。
ファイル FileInputStream FileOutputStream
ファイルの読み込み処理を行います。 ファイルの書き込み処理を行います。
フィルタ FilterInputStream FilterOutputStream
読み込むデータにフィルタ処理を施したい時に使用します。 書き込むデータにフィルタ処理を施したい時に使用します。
先読み処理 PushbackInputStream
読み込むデータの先読み処理を行います。PushbackInputStreamクラスはFilterInputStreamクラスのサブクラスです。
パイプ PipedInputStream PipedOutputStream
パイプ処理のうち入力関係の処理を行います。パイプ処理とはある処理の出力を別の処理の入力とする処理のことを言います。 パイプ処理のうち出力関係の処理を行います。パイプ処理とはある処理の出力を別の処理の入力とする処理のことを言います。
String StringBufferInputStream
StringBufferからバイトデータを読み込む処理を行います。
プリント PrintStream
印字出力用のメソッドが用意されています。PrintStreamクラスはFilterOutputStreamクラスのサブクラスです。
文字とバイトの変換 InputStreamReader OutputStreamWriter
文字ストリームとバイトストリームを連携する働きをします。InputStreamからバイトデータを読み込み文字データに変換する際に使用します。 文字ストリームとバイトストリームを連携する働きをします。文字データをバイトデータに変換しそれをOutputStreamに書き出します。
オブジェクト ObjectInputStream ObjectOutputStream
オブジェクトを読み込む処理を行います。 オブジェクトを書き込む処理を行います。
データ変換 DataInputStream DataOutputStream
マシンに依存しないデータの読み込み処理を行います。DataInputStreamクラスはFilterInputStreamクラスのサブクラスです。 マシンに依存しないデータの書き込み処理を行います。DataOutputStreamクラスはFilterOutputStreamクラスのサブクラスです。
連結 SequenceInputStream
複数の読み込みストリームを一つに集約します。

1はじめての入出力