Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Java基本 > 入出力 −1.はじめての入出力
更新日:2005/10/18
入出力−1.はじめての入出力
このページではJavaでの入出力処理の概要について説明します。
入出力処理の概要
プログラムを作成する際、「あるファイルのデータを読み込み、別のファイルへ書き出す。」、「あるデータを読み込む際、データのフィルタ処理を行う。」、「あるデータの書き込みを、別のプログラムの入力値とする。」などと言った、入出力に関する処理を行います。Javaでは、それらの処理をjava.ioパッケージに含まれる様々なクラスで対応します。

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

【入力処理】
.宗璽垢紡个憩匹濆みストリームを開く

入力処理_1


▲如璽燭なくなるまで読み込む

入力処理_2


ソースに対し読み込みストリームを閉じる

入力処理_3


【出力処理】

.宗璽垢紡个圭颪込みストリームを開く

出力処理_1


▲如璽燭なくなるまで書き込む

出力処理_2


ソースに対し書き込みストリームを閉じる

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



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道