- 締切済み
サーブレットで掲示板
サーブレットで掲示板を作っています。 流れとしては 【HTML入力フォーム】 【getPrameterでデータを取得】 【PrintWriterでCSVファイルへ書き込み】 【BufferedWriterでファイルの内容を読み】 【readLineで一行読む】 【一行読んだ内容をStringTokenizerで分割】 【hasmorToken、while文nextTokenで次々と分割して表示】 という形にしています。 ただ、この状態では新しい内容がどんどん下へ表示されます。 そのため、CSVファイルへ入れたものを配列に入れ順番を入れ替えて表示することを考えました。 一列読み取った内容を配列の[i]に入れ、for文の条件で、ディクリメントしながら次々表示させていこうと考えました。 色々考えていたら、ここの処理がごちゃごちゃしてきてしまいました。 *ファイルの内容を格納する配列box[30]とする。 *i=0で初期化する。 *box[i]のiをインクリメントする。 *0~29まで配列に格納する。 *それを分割する。 *for文により、ディクリメントしながら出力する。 おそらく難しく考えすぎなのかとも思います。 新しいものが上に表示させるために、配列に入れるのは間違ってはいないと思いますが、もうすこしシンプルなやり方がありましたら教えていただきたいのです。 一人で考えていても時間がたつばかりではまってます。 それに、このやり方は実用的でないことにも気づきました。 配列がその内いっぱいになったときにエラーが出るからです。 そのためにVecroeの使用を考えています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- pcbeginner
- ベストアンサー率46% (261/560)
>最終的には掲示板としてより実用的なものを作る必要があるんです。 であればDBに格納した方がいいんじゃないですか? 質問やお礼を読むと同時更新した場合とかを考慮していないように思われますし。 あと、ごちゃごちゃするのは ・ファイルに書く ・ファイルから読む ・分割する ・表示する を1つのメソッドの中で実行しようとしているからややこしくなってしまうのでは? 例えば String 書くデータ = req.getParameter("入力内容"); ファイルに書く(ファイル名,書くデータ); Vector 読み込んだ内容 = ファイルから読む(ファイル名); Vector 分割した内容 = 分割する(読み込んだ内容); 表示する(分割した内容); としておいて private void ファイルに書く(String ファイル名,String 書くデータ){ //書く … } private Vector ファイルから読む(String ファイル名){ //1行読んでVectorに格納 Vector v = new Vector(); while(){ v.add(in.readLine()); } return v; } private Vector 分割する(Vector 読み込んだ内容){ Vector 分割した内容 = new Vector(); for(int i = 0;i < 読み込んだ内容.size();i++){ //1行ごと分割 StringTokenizer st = new StringTokenize((String)読み込んだ内容.get(i)); //分割する while(st.hasMoreTokens()){ 分割した内容.add(st.nextToken()); } } return 分割した内容; } private void 表示する(Vector 分割した内容){ for(int i = 分割した内容;i > -1;i--){ //i番目の内容を表示 } } のような感じでどうでしょうか。 (…まだごちゃごちゃしてますかね…orz)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
配列とかVectorを使うなら Stackを使えばいいと思います。 たかだか30個くらいだったら 文字列で outputString = 出力 + outputString; すれば、新しいモノ程前にくるようにできると思いますが。
お礼
早速ありがとうございます。 今は試しに30個を配列に格納して表示できるかっていることでやっているんですが、最終的には掲示板としてより実用的なものを作る必要があるんです。 それで、どんどんふえていくことを考えて、 ・受け取ったデータをVectorに入れる。 ・ファイルへ書き込む。 ・一行読む。 ・Vectorのの順番を入れ替える。 ・表示する。 という流れがどうかと思っていたんです。 ただ、ここで入れ替えて表示する条件を考えていたらごちゃごちゃしてきてしまったんです。
お礼
お礼が遅くなって申し訳ありません。 結局Vectorに追加して入れて、順番を入れ替えて、分割させて、表示するという順番でうまくいきました。 一度整理したらわかりやすくなりました。