TEAMWORKSTECH株式会社

06.ファイルを読み込む

当コーナーはJavaの基本的な事項を紹介していくものです。

ファイルを読み込む

今回はシステムの代表的な機能である「ファイル読み込み処理」をおこなってみます。
最初にですが、いきなりプログラミングを始めるの結構たいへんな作業です。

そこで「どのような仕組みで表現するか」 を書き出します。
これを一般的にプログラムの仕様と言います。

今回の仕様は以下のとおりです。

ファイル読み込みクラスを作成する。 

ファイル読み込みクラスでは、ファイルを読み込んできた5件のデータを
1行づつ配列に格納し、配列に格納したファイルの内容を1行ずつコンソールに表示する。

ファイル読み込みクラスを作成します。以下のコーディング完了後Sample06.javaと言う名前で保存して下さい。

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException;

/* 
* クラス名 :Sample06.java 
* 
* 作成日 :2006/12/01 
* 作成者 :アイオステクノロジー 
* 最終更新日:2006/12/01 
* 最終更新者:アイオステクノロジー 
* 
*/

/** 
* Sample06のメインクラス。 
*/ 
public class Sample06 { 
    /** 
     * メインメソッド 
     */ 
    public static void main(String[] args) { 
        BufferedReader br = null; 
        //配列の要素を5件で宣言します。 
        String strTable[] = new String[5]; 
        try { 
            br = new BufferedReader(new FileReader("sample.csv")); 
            int i = 0; 
            //ファイルの件数分ループして配列に格納します。 
            while (br.ready()) { 
                String line = br.readLine(); 
                strTable[i] = line; 
                i++; 
            } 
            //配列の要素分処理を繰り返し表示する。 
            for(int j =0 ; j

次に読み込むファイルとなるCSVファイルを作成します。以下の内容をエディターで作成し
Sample06.javaを保存したフォルダに「sample.csv」と言う名前で保存して下さい。

アイオス一郎,住所1丁目
アイオス次郎,住所2丁目
アイオス三郎,住所3丁目
アイオス四郎,住所4丁目
アイオス五郎,住所5丁目

コマンドプロンプトでコンパイル後、「java Sample06]と入力し実行してみます。

CSVファイルが読み込まれて、配列の内容が表示されました。

Sample06.javaについて説明します。

Javaでファイルを読み込むにはFileReaderクラスを利用します。 FileReader(ファイル名)と書きます。
ただし、FileReaderクラスはファイルを1文字づつ読み込むので非効率です。

そこでBufferedReaderクラスが登場します。BufferedReaderクラスはデータをバッファと言う一時記憶に溜めてから入力や出力をおこなう仕組みを持っています。
これによりファイルへのアクセスが1文字づつではなく、1行づつ読み込むことで処理を効率化できます。

それが br = new BufferedReader(new FileReader("sample.csv")); のコードです。 
これを FileReaderを BufferedReadeでラップすると言います。

そしてファイルが終わるまで処理を繰り返す仕組みが必要なのでBufferedReaderのreadyメソッドを利用します。 
ファイルの中にまだ読む文字が残っている間、繰り返します。
繰り返し命令の中で1行づつ、データを格納していきます。

今回のSample06Sub.javaではデータの格納先に配列と言うものを利用しています。
配列の宣言は、型 配列名[]とし、new演算子側で型[要素数]を書きます。
よってSample06Sub.javaでは要素数5のString型の配列が作られます。

なお、配列には添字と言うものがあるので配列のn番目に値を入れたいときには
strTable[i] = line;
と言うように配列名[添字]でデータの格納が出来ます。

配列の要素数を求めるにはlenghメソッドを利用します。
ループ処理でfor(int j =0 ; j

例外処理について

さて、Sample06.javaではTry、Catchというコーディングがあります。
これを例外処理を捕まえると言います。
例外とは、たとえば読み込んだファイルが存在しないときなど何らかのエラーが発生します。
そのようなエラーの事をExceptionと呼びます。
試しに、br = new BufferedReader(new FileReader("sample.csv"));を
br = new BufferedReader(new FileReader("sample1.csv"));
と書き換えてコンパイルしなおして実行してください。

ファイルが見つかりませんと表示されました。
これは以下のような仕組みになっています。

try { 
例外が起こるかも知れない処理;
}catch(例外クラス名 変数名)
例外を捕まえた場合の処理;
}

ファイル読み込みをトライ(try)してみてファイルがなかったので例外をキャッチ(catch)した。と言うことです。
ファイルが見つからなかった際はJavaではFileNotFoundExceptionが発生するのでそのクラスをキャッチした訳です。
また、エラー情報(バックトレース)を表示することによって、 どこのクラスの何行目で例外が発生したかを確認できます。