- 締切済み
ファイルから文字を読みとる。
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を勉強するためのおすすめサイト、書籍がありましたら教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nuki
- ベストアンサー率30% (6/20)
J2SE 5.0ですと、 ご所望のscanfの代わりはjava.util.Scannerで実装されているようです。 まだ、私は試したことがありませんので、C言語同様の使い勝手かどうかは不明ですが。
- K-Nagisa
- ベストアンサー率0% (0/0)
#1 の者です~。 出力に関しては、お礼に書いてあるとおりで問題ないと思いますよ。 x = br.readLine(); の左辺とか、タイプミスが結構ありましたが^^ あと、少し思ったのですが、座標を「(X, Y)」の形式でファイルに記録 することは本当に必要ですか? 単純に「X, Y」のようにコンマ区切りか、「X Y」のようにスペース区切り でもよい気がします。 もしこれでも良ければ、java.util の StringTokenizer を使えば、 もっと簡単に読み取れます。 ちなみに結城さんの本は、友達にも強く勧めています^^
- K-Nagisa
- ベストアンサー率0% (0/0)
こんにちは! 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
お礼
ありがとうございます。 実行できました。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します。 とすればよいのでしょうか? なにか抜けてる&スマートではない気がするのですが。