第10章 ファイル入出力

10.1 入出力の基本概念について

これまで作成してきたプログラムの中には、画面に数字や文字等の出力処理や、キーボードから入力処理を行うものがありました。入出力は、画面やキーボード、それにファイル等に対して行われます。これらは全て異なる装置ですが、Javaではこれら異なる装置に対する入力や出力を統一的な方法で行えるようになっています。この入出力機能を支える概念をストリーム(stream)といい、様々な異なる装置を同じように扱うための仕組みとなっています。
ストリームとは、「流れ」という意味になり、Javaで言うとデータの流れのことを指します。
流れは必ずある所から別のどこかへ流れます。Javaでもどこからどこへとデータが流れるかを指定して行います。例えば、「キーボードからファイル」、「ファイルからディスプレイ」等様々なパターンがあります。
ストリームは大きく分けて文字ストリームとバイトストリームの2つに分けられます。
文字ストリームとはそのままの通り文字や文字列を扱うもので、入力はキーボードやテキストファイル、出力はディスプレイやテキストファイルになります。バイトストリームは、バイナリデータを扱うストリームで、floatなどのデータや画像などを扱うことができます。本章では文字ストリームを利用した方法を紹介していきます。


図 10.1.1: Javaの入出力を支えるストリーム

このストリームの機能はJava(クラスライブラリ)で提供されるもので、プログラマが意識して特殊な処理や手続きを行わなければならないものではありません。ただ提供される入出力を扱うクラスの使い方を覚える必要があります。

ポイント
  • Javaの入出力処理はストリームを使って行われる。

それではファイルの入出力を行う前に、これまでの学習で何度も登場した画面に出力を行うコードや、キーボードからの入力を行うコードで基本的なストリームの扱い方を少し復習してみましょう。

10.1.1 キーボード入力を行い画面に出力するプログラム

キーボード入力を行いその結果を画面に出力します。

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch10
③ 名前: KeyInOut
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

  package jp.co.f1.basic.ch10;

  import java.util.Scanner;

  public class KeyInOut {
    public static void main(String[] args) {
      //Scannerクラスのオブジェクト生成
      Scanner sin = new Scanner(System.in); //①

      System.out.print("文字列を入力して下さい=>");
      String strLine = sin.nextLine(); //②

      System.out.println("「" + strLine + "」が入力されました。");
    }
  }
  
実行結果

解説

学習済みの内容の為、詳細なプログラム解説は省略します。
このプログラムで注目して欲しいのは、画面やキーボードから入出力を行う為に、標準出力(画面)、標準入力(キーボード)をあらわすオブジェクトを利用していることです。以下の2つがそれに該当します。

  • System.in:標準入力
  • System.out:標準出力

これまでキーボードから文字列を入力する為に、次のような手順をとってきたのです。
① System.in(標準入力)を使った読込みを行うScannerクラスのオブジェクトを作成する。
② ①のnextLine()メソッドを利用して1行データを読み込む。
Scannerクラス内部で「InputStreamReaderクラス(文字ストリーム)」を利用しています。
このInputStreamReaderクラスが、文字や文字列を読み書きする為に使われるているストリームです。
入出力処理を行うにはストリームが欠かせないものとなっているのです。

NEXT>> 10.2 ファイルの仕組みを知る