• 締切済み

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

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を勉強するためのおすすめサイト、書籍がありましたら教えて下さい。

みんなの回答

  • nuki
  • ベストアンサー率30% (6/20)
回答No.3

J2SE 5.0ですと、 ご所望のscanfの代わりはjava.util.Scannerで実装されているようです。 まだ、私は試したことがありませんので、C言語同様の使い勝手かどうかは不明ですが。

  • K-Nagisa
  • ベストアンサー率0% (0/0)
回答No.2

#1 の者です~。 出力に関しては、お礼に書いてあるとおりで問題ないと思いますよ。 x = br.readLine(); の左辺とか、タイプミスが結構ありましたが^^ あと、少し思ったのですが、座標を「(X, Y)」の形式でファイルに記録 することは本当に必要ですか? 単純に「X, Y」のようにコンマ区切りか、「X Y」のようにスペース区切り でもよい気がします。 もしこれでも良ければ、java.util の StringTokenizer を使えば、 もっと簡単に読み取れます。 ちなみに結城さんの本は、友達にも強く勧めています^^

  • K-Nagisa
  • ベストアンサー率0% (0/0)
回答No.1

こんにちは! StreamTokenizer を利用する方法です。 java.io をインポートしてください。 try { FileReader r = new FileReader("sample.txt"); StreamTokenizer st = new StreamTokenizer(r); st.whitespaceChars('(', ')'); st.whitespaceChars(',', ','); while (st.nextToken() != StreamTokenizer.TT_EOF) { double x = st.nval; st.nextToken(); double y = st.nval; System.out.println("x = " + x + ", y = " + y); } } catch (Exception e) { e.printStackTrace(); } 私は、結城浩さんの「Java 言語プログラミングレッスン」で Java を学びました。 http://www.hyuki.com/jb/index.html

a-k-a
質問者

お礼

ありがとうございます。 実行できました。SUNのAPI仕様を見てioっぽいなとは思ったんですが、多くて(^_^;) 勉強になりました。 結城さんの本はperlでお世話になりました。 「独習」と悩みました。そのときは目次をみてもさっぱりだったのですが、また本屋で見てみようと思います。 あと、書き込みなんですが、 System.out.print("x値を入力 : ");     x = br.readLine(); System.out.print("y値を入力 : ");     y = br.readLine(); x = Integer.parseInt(x_data); y = Integer.parseInt(y_data); として、 PrintWriter output = 続き略。 for(int i=0; i < area_data.size(); i++){   output.println("("+area_data.elementAt(i)).getX()+"," ((Area)rea_data.elementAt(i)).getY()+")"); }output.close(); 注:)getX(),getY()はxとyをreturnします。 とすればよいのでしょうか? なにか抜けてる&スマートではない気がするのですが。

関連するQ&A