みその計算物理学
ホーム はじめに リンク集
ファイルに書かれている数値データを読み込み配列に代入する方法
  • StreamTokenizerクラス

    ファイルに書き込まれた数値データを読み込み、変数や配列に代入したいとする。ここではファイルinput.dataに以下の数値データが書き込まれているとする。

    0 1
    2 3
    4 5
    6 7
    8 9
    10 11

    数値のみを読み込むには、数値の間にある空白や改行文字を避けなければならない。そこでStreamTokenizerクラスを用いる。これを使えば上手く数値データのみを抽出できる。StreamTokenizerクラスを使うにはまずこのクラスのオブジェクトを作る。

    StreamTokenizer オブジェクト名=new StreamTokenizer(Readerオブジェクト名)

    そしてnextToken()を使ってファイルに書き込まれたトークンを次々に取得していく。トークンとは文章の最小単位のようなもので、例えば単語と数字が書かれていたら、それぞれの単語と数字がトークンである。

    その際取得したトークンは数字のときnval、文字列のときsval、その他のときttypeにデータが入る。

    またnextToken()は数字のときTT_NUMBERを返し、単語の場合はTT_WORDを返す。その他の場合は、トークンに等しい文字を返す。ファイルの終端に達したときはTT_EOF、行の終わりに達したときはTT_EOLを返す。nextToken()は以下のように使う。

    オブジェクト名.nextToken()
  • プログラム例

    このプログラムでは、1から11までの数字を半角スペースを空けて書き込み、2つ数字を書き込んだら改行を行われるように数値データが書き込まれたファイルを読み込みコマンドプロンプトに表示させ、さらにそれらの数値データのみを抽出して配列に代入する。読み込むファイル名はinput.dataである。

    import java.io.*;
    
    class Numberread
    {
            public static void main(String arg[])
            {
                    double a[]=new double[1000];
                    int i;
                    i=0;
                    try
                    {
                            FileReader fr=new FileReader("input.data");     //FileReaderオブジェクトの作成
                            StreamTokenizer st=new StreamTokenizer(fr);     //StreamTokenizerオブジェクトの作成
    
                            while(st.nextToken()!=StreamTokenizer.TT_EOF)   //ファイルの終わりに達するとTT_EOFが返されるので、そこでループ終了
                            {
                                    System.out.print(st.nval + " ");        //読み取ったデータを表示する。
                                    a[i]=st.nval;   //読み取ったデータを配列に代入
                                    i++;
                            }
                            System.out.println("");
                            fr.close();
                    }
                    catch(Exception e)
                    {
                            System.out.println(e);  //エラーが起きたらエラー内容を表示
                    }
    
                    for(int j=0;j<i;j++)
                    {
                            System.out.print(a[j] + " ");   //配列の中のデータを表示
                    }
                    System.out.println("");
            }
    }
    
  • プログラム実行結果

    プログラムを実行すると以下の通りに画面に表示される。

    0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0
    0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0
    Press any key to continue

Java講座一覧に戻る