ファイルの読み込みについて。Javaでファイルの入出力する方法を教えてください。

このQ&Aのポイント
  • Javaでファイルの入出力について分からない事があります。ファイルから値を読み込んで変数に入れる方法が分かりません。
  • ファイルの内容は変数に代入したいと思っています。しかし、ファイルの各行のデータ数がバラバラで、どのように変数に代入すればいいか分かりません。
  • 現在、ファイルから値を読むことはできましたが、それぞれを別々の変数に代入する方法が分かりません。フォートランのような書き方ではなく、Javaでの方法を教えていただきたいです。
回答を見る
  • ベストアンサー

ファイルの読み込みについて。

javaを勉強中なのですが、ファイルの入出力について 分からない事が出てきましたので、ご教授ください。 以下のファイル(cntl.d)から値を読み込みそれぞれ変数に入れたいと思っています。 各行のデータ数がバラバラなので、どのようにすればよいか、見当がつきません。 また、それぞれを別の変数に代入するのも。 やっと、一つの変数にファイルから値を読むことはできました。 cntl.dの内容。 1331   1000 602   0   0   0   0 0.0100000   10.0000000   1.0e-12   .0000010 100   200   0   1   1 2   0   100   0   0 という内容で、 nnode,nelem nb1,nb2,nb3,nb4,nb5 dt,tend,epscg,epsmac iopt1,iopt2,iopt3,iopt4,iopt5 iopt6,iopt7,iopt8,iopt9,iopt10 とそれぞれ変数に値を代入したいと思っています。 例えばフォートランなら、 read (icntl,100) nnode,nelem read (icntl,110) nb1,nb2,nb3,nb4,nb5 read (icntl,120) dt,tend,epscg,epsmac read (icntl,130) iopt1,iopt2,iopt3,iopt4,iopt5 read (icntl,140) iopt6,iopt7,iopt8,iopt9,iopt10 100 format(2i10) 110 format(5i10) 120 format(4f15.7) 130 format(5i10) 140 format(5i10) こんな感じになるのかと思いますが、javaでは見当がつきません。 ご存知の方がいらっしゃいましたら教えてください。 また、なにか不足の事項がありましたら補足いたします。 よろしくお願いいたします。

  • a-k-a
  • お礼率43% (77/176)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mcq
  • ベストアンサー率48% (45/93)
回答No.1

JAVAの標準機能には一行の文字列から複数の数値を読み取るメソッドが無いようなので、以下のサイトのようにする必要があるそうです。 http://www.ikko.k.hosei.ac.jp/Javasupp.htm この場合ならこんなところでしょうか String str; StringTokenizer aSt; BufferedReader d = new BufferedReader(new FileReader("cntl.d")); str = d.readLine(); aSt = new StringTokenizer(str," "); int nnode = Integer.parseInt(aSt.nextToken()); int nelem = Integer.parseInt(aSt.nextToken()); str = d.readLine(); aSt = new StringTokenizer(str," "); int nb1 = Integer.parseInt(aSt.nextToken()); int nb2 = Integer.parseInt(aSt.nextToken()); int nb3 = Integer.parseInt(aSt.nextToken()); int nb4 = Integer.parseInt(aSt.nextToken()); int nb5 = Integer.parseInt(aSt.nextToken()); str = d.readLine(); aSt = new StringTokenizer(str," "); Double dt = Double.parseDouble(aSt.nextToken()); Double tend = Double.parseDouble(aSt.nextToken()); Double epscg = Double.parseDouble(aSt.nextToken()); Double epsmac = Double.parseDouble(aSt.nextToken()); …

参考URL:
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/StringTokenizer.html
a-k-a
質問者

お礼

サイトを紹介していただきありがとうございます。 自分で調べても該当するものが見つかりませんで、 まだまだだと痛感しております。 これから参考サイトを拝見しようと思います。 ありがとうございました。

関連するQ&A

  • csvファイルからの読み込みがスムーズにできません

    fscanfでCSVファイルから文字列を取り込み、カンマ区切りで4つの変数に文字列を代入しようと考えているのですが、出力されたcsvファイルが変わった区切りかたをしているのでうまく変数に代入できずに困っております。 例えば、出力されたcsvファイルは以下のようになっております "ABC CO.,I","4540",""STAR"","2010/03/31" 希望としては aにABC CO.,I bに4540 cにSTAR dに2010/03/31 をそれぞれ代入したいのですが aに入る文字列にはCO.,Iというようにカンマが既にありますので カンマ区切りで読み込むとめちゃくちゃになってしまいます ですので基準をダブルクオーテーションに置き、"と"の間の文字列を代入というような形が取れれば良いのですが、このような方法での文字列取得は可能でしょうか? c言語の勉強を始めて間もない為、低レベルな質問、表現であることをお許し下さい。 よろしくお願いします。

  • 容量の大きいCSVファイルの読み込みについて

    容量の大きいCSVファイルの読み込みについて 23メガバイトあるCSVファイルに格納し、datファイルに書き込みを行いたいのですが、実行してみるとセグメンテーション違反が表示され上手くいきません。どなたか具体的に教えてください。 環境はMacOSです。 下にファイルを格納し標準出力するまでのプログラムとCSVファイルの内容を記述します。 //********************************************************************************// #include <stdio.h> #include <string.h> #include <stdlib.h> #define D_LENGTH 10000000000000 struct Data{ double voltage; double pressure; double trigger; }; int main(int argc, char *argv[]) { FILE* fp; // ファイルポインタ用 double ret; int n, i = 0; struct Data *dt; fp = fopen("p37-e1.csv","r"); if (fp == NULL) { printf( "file open error\n" ); exit(EXIT_FAILURE); } dt = (struct Data*)malloc(sizeof(struct Data)*D_LENGTH); while( ( ret = fscanf( fp, "%[^,],%[^,],%[^,],%lf",dt[i].voltage,dt[i].pressure,dt[i].trigger) ) != EOF ){ i++; } printf("\n"); printf("Read File*******************\n"); for (n = 0; n < i; n++) printf("%lf,%lf,%lf\n",dt[n].voltage,dt[n].pressure,dt[n].trigger); free(dt); return(0); } //***************************************************************************// p37-e1.csv //***************************************************************************// 2.329595,0.001373,-4.861982 2.325628,0.001984,-4.744793 2.320745,0.001678,-4.659953 2.319829,0.002289,-4.707866 2.319219,0.002289,-4.699321 2.317082,0.002594,-4.532387 2.312505,0.001984,-4.575723 . . . . //*********************************************//

  • テキストファイルからの読み込みがうまくできません(>_<)

    C言語初心者の学生です。 読んでいただきありがとうございます。 テキストファイルに数字を並べ、それを読み込んで char型の変数に入れ、さらにatofによってfloat型に変換し、計算に使っていくということがしたいのですが、 テキストファイルの書き方がおかしいのか、プログラムの書き方がおかしいのか、テキストファイルに書いたとおりの値とは異なるおかしな値が表示されます・・・ だいたいのプログラムの書き方は、 char型のa2、float型のa[n][n]、FILE *fpINを定義して if ( (fpIN = fopen("matrix.txt", "r" )) != NULL ){ if ( fgets(a2,sizeof(a2),fpIN) != NULL ){ } fclose( fpIN ); } for(i=0;i<n;i++){ for(j=0;j<n;j++){ a[i][j]=atof(a2); } } というようなものです。 テキストファイルは、数字をカンマで区切ったり、スペースで区切ったりと いろいろ試してみたのですが、やはり書き込んだ値とは異なるものが表示されます・・・ 最終的には、ひとつのテキストファイルに 複数の行列のための値を書き込んでおき、それを読み込んで計算させるということをしたいのです・・・ どなたか、正しく値が読み込まれない原因が分かりましたら、教えていただければと思います。 お手数をおかけしてすみませんが、よろしくお願いします。

  • テキストファイルの値をバッチファイルの中の関数に代入する方法をご指導して頂けないでしょうか?

     初めまして、最近バッチファイルの勉強をしているのですが、テキストファイルの値をバッチファイルの中の変数に代入する事は可能なのでしょうか?  私が今考えているのはテキストファイルの中の値をバッチファイルの中の変数に代入するというものです。 例 --test.txt-- 2009 11 27 ---------- --test.bat-- FOR /L %%i IN (1,1,10) DO CALL SUB.BAT year month day ---------- 上の例のテキストファイルの値、2009をバッチファイルのyearに代入という事は出来るのでしょうか? もし可能であればtest.batにどのような事を書けばいいのでしょうか? ご指導のほどをよろしくお願い致します。

  • ファイルから文字を読みとる。

    JAVAを勉強中でファイル入出力で困っているので教えて下さい。 あるファイル(sample.txt)があるとします。 [sample.txt] (0,0) (10,20) このファイルは(x座標,y座標)のフォーマットで1行に1座標が書き込まれているとします。 ここからx座標、y座標をそれぞれ変数x,yに代入することはできるのでしょうか? C言語だと ("%d,%d",&x,&y)のような形でそれぞれ読み書きできたと思うのですが、 while((x_data = input.readLine()) != null){  y_data = input.readLine();  area_data.addElement(new Area(x_data,y_data)); } というかたちで 0 0 10 20 と1行に1文字ずつしか読み書きできません。 ご存じの方は是非教えて下さい。 また、JAVAを勉強するためのおすすめサイト、書籍がありましたら教えて下さい。

  • JavaでCSVファイルの読み込みについて教えてください

    質問失礼します。 現在javaのプログラミングでCSVファイルを扱っています。 もしかすると初歩的な質問かもしれませんが、例えば   1 2 3 4 5 ・・・・ A 23 12 43 21 23 ・・・・ B 45 32 21 23 44 ・・・・ C ・ ・ ・ ・ ・ D ・ ・ ・ ・ ・ 上のようにExcel風にCSVファイルができているとして、例えば2列目B行のデータを読み込みたいといった場合、ピンポイントで指定した値を読み込む方法はあるのでしょうか? よろしくお願いします。

  • javaScriptの変数をJavaの変数に代入する。

    jspで作ったプログラムがあるこのような場合変数を共有する方法はありますでしょうか? 以下の場合iの(JavaScript)値をjavaの変数iに代入したい場合どうすればいいでしょうか? <%! String s[] ={A,B,C,D,E} %> function chek(){ for(i = 0;i< 5 ;i++){ <%! int i =%> = i;//←この部分です //document.form1.desc.valueにはBの値が入っている if(<%! s[i] %> == document.form1.desc.value){ alert("Bです"); } }

  • [Excel VBA] 行の値を1つの変数に代入したい

    たとえばA1:A10に値があったら、3個ずつ値を1つの変数に代入したいのですがそのようなことは可能でしょうか?(改行は"%0D%0A"に置換します) たとえば、A1:A10に A B C D E F G H I J K とあったら、 1ループ目: strString = "A%0D%0AB%0D%0AC" のように代入したいのですが。 1つ1つのセルの値を追加代入していくしかないのでしょうか?

  • count(*)で取得した値をJAVAの変数に代入するには?

    SQLの話なんですが、 count(*)で取得した値をJAVAの変数に代入するには?

    • ベストアンサー
    • Java
  • javascript外部ファイルから読み込み

    JavaScriptで変数の値を外部ファイルに記載しておきたいのですが 読み込み方などがわかりません。 if(aaa=bbbb) { } bbbbの値を外部の read.txt に記載しておきたいです。

専門家に質問してみよう