• ベストアンサー

リンクリスト内のノードに保管された情報を保存する

JAVAでの、一方向リンクリストを作成しています。 ノードに含まれる内容は以下のようなものです。 名前、ID、アドレス、電話番号、成績、生年月日 これらの情報はキーボードから入力され各ノード内に保管されます。 質問は、一度ぷろぐらむを終了する前にノード内にある入力された情報を保存したいのですがその方法がわからず困っています。 次回プログラムを立ち上げた際、再度このノード内に入力した情報を読み込む事は可能でしょうか?

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

  • ベストアンサー
noname#119918
noname#119918
回答No.3

/* 一方向リストとしてjava.util.LinkedListを使用し、 リストの要素としてSomeData(名前,ID等を保持するクラス)を用いるものと した場合のコードです。 字数制限に引っかかるので、ファイルからのロードとセーブの部分のみ掲載します。 SaveAndLoad.load("sample1.txt"); でsample1.txtファイルを読み込み、LinkedListとして復元 SaveAndLoad.load(list , "sample2.txt"); で、list内容をsample2.txtファイルに保存 また、データファイルにおいて、名前、IDなどの要素は コンマ","で区切られるものとします。 */ class SaveAndLoad { // ファイルからロード public static LinkedList<SomeData> load(String filename) throws IOException , FileNotFoundException { BufferedReader br = new BufferedReader(new FileReader(filename)); String line; LinkedList<SomeData> list = new LinkedList<SomeData>(); while((line = br.readLine()) != null) { // 空行を読み飛ばす if(line.matches("\\s*")) { continue; } String[] items = split(line , ","); SomeData d = new SomeData(items); list.add(d); } br.close(); return list; } // ファイルへセーブ public static void save(LinkedList<SomeData> list , String filename) throws IOException { BufferedWriter bw = new BufferedWriter(new FileWriter(filename)); Iterator<SomeData> it = list.iterator(); while(it.hasNext()) { SomeData d = it.next(); bw.write(d.toString() + "\n"); } bw.close(); } // 文字列lineを、区切り文字delimで分割 private static String[] split(String line , String delim) { Vector<String> vec = new Vector<String>(); StringTokenizer tokenizer = new StringTokenizer(line , delim); while(tokenizer.hasMoreTokens()) { vec.add(tokenizer.nextToken()); } return vec.toArray(new String[vec.size()]); } }

shachi954
質問者

お礼

コードまで書いていただき本当に助かりました。 全て解決いたしました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

可能です。 ○ データの集合 ○ ・ファイル → 個々の目的 ・DB    → 多目的 まぁ、簡単なものでしたらファイル、複雑なものはDBでよろしいかと。

shachi954
質問者

お礼

自分の場合はファイルに保存という事になります。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • nfonfonfo
  • ベストアンサー率63% (12/19)
回答No.1

こんばんわ。回答としては 1,FileWriterクラスを使用して、リンクリストのノード情報をファイルに保存。 2,プログラム起動時にFileReaderクラスを使用してファイルからノード情報を読み取り、リンクリストにノード情報を追加という方法で可能です。 ↓は補足質問です。 1,文中のリンクリストとはjava.util.LinkedListを使わずに、自作されたクラスなのでしょうか? 2,作成されたプログラムの実行形態はどの形態なのですか? (Javaアプリケーション・アプレット・swing/awt・その他) 参考情報 クラス FileReader http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/FileReader.html クラス FileWriter http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/FileWriter.html

shachi954
質問者

補足

ユーティリティを使わない自作のクラスで 実行形態はjavaアプリケーションです。 添付していただいたReader, Writerの情報で対応できました。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 双方向リストの関数

    双方向リストにデータファイルから読み込んだ氏名と成績のデータを追加し,リストの末尾から順にデータを表示するプログラムを作成したのですが、insertLast() 関数を用いて末尾ノードの後ろに新しいノードを連結するという部分をどのようにして良いのかわからず困っています。 どのように記述して良いのかわからなかった部分を/*** ***/のコメントで示してあります。 どなたかアドバイスやヒント、その他の指摘などご教授してくださる方いましたらよろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME_LENGTH 20 /* 名前を格納する文字列の長さ */ /* 双方向リストのノードとなる構造体の定義 */ typedef struct sList{  struct sList *prev; /* 前のノードのアドレス */  char name[NAME_LENGTH]; /* 名前 */  char grade; /* 成績 */  struct sList *next; /* 次のノードのアドレス */ } sNode; /* この構造体を sNode型 と定義する */ /* 双方向リストの先頭と末尾を格納するための構造体 */ typedef struct {  sNode *firstNode; /* リストの先頭ノードのアドレス */  sNode *lastNode; /* リストの末尾ノードのアドレス */ } manageList; /*  双方向リストの末尾にノードを追加する関数 insertLast()  引数   manageList *list リストの先頭・末尾ノードを管理する構造体のアドレス   sNode *node 末尾に追加したいノードのアドレス  返値   なし */ void insertLast(manageList *list, sNode *node ) {  /*** リストの末尾にノードを追加する ***/  return; } /*  双方向リストの新しいノードを作成する関数 makeNewNode()  引数   char *aName 名前(文字列)の先頭アドレス   char aGrade 成績  返値   sNode * 新しく作成したノードの先頭アドレス */ sNode *makeNewNode(char *aName, char aGrade ) {  sNode *pNewData;  /* sNode 型のメモリ領域を確保 */  pNewData = (sNode *) malloc( sizeof(sNode) );  /* 名前と成績のデータを設定する */  strcpy( pNewData->name, aName );  pNewData->grade = aGrade;  pNewData->prev = NULL;  pNewData->next = NULL;  return( pNewData ); } /*  main()  引数   なし  返値   int 正常終了の時 0     異常終了の時 -1 (ファイルの読み込み失敗など) */ int main( void ) {  manageList list; /* リストの先頭・末尾ノードのアドレスを持つ構造体 */  sNode *pNew; /* 新しく作成したノードのアドレスを持つ変数 */  sNode *pNow; /* 現在見ているノードのアドレスを持つ変数 */  FILE *fp; /* データファイルのファイルポインタ */  char name[ NAME_LENGTH ]; /* ファイルから読み込んだ名前を一時的に保持する変数 */  char grade; /* ファイルから読み込んだ成績を一時的に保持する変数 */  /* 初期状態では先頭・末尾ノードともNULL */  list.firstNode = NULL;  list.lastNode = NULL;  /* データファイル exer6.txt を読み込み用に開く.    ファイルが開けなかった場合,エラーメッセージを表示し異常終了する.*/  fp = fopen("exer6.txt","r");  if(NULL == firstNode){   printf( "ファイルが開けませんでした. \n" );   return( -1 );  }  /* データをファイルの最後(EOF)まで読み込み,双方向リストにデータを追加する */  while( EOF != fscanf( fp, "%s %c", name, &grade ) ) {   /* 新しいノードを作成 */   pNew = makeNewNode( name, grade );   /*** insertLast() 関数を用いて末尾ノードの後ろに新しいノードを連結する ***/   pNow->next = pNew ;   pNew->prev = pNow ;   pNow = pNew ;  /* ファイルを閉じる */  fclose( fp );  /* 現在見ているノードを末尾ノードにセットする */  pNow = lastNode  /* 末尾のノードから前のノードへたどりながらデータを出力する */  while( NULL != pNow ) {   /* 出力 */   printf( "%s %c\n", pNow->name, pNow->grade );   /* 現在見ているノードを一つ前のノードにする */   pNow = pNow->prev;  }  return( 0 ); }

  • メーリングリストで。。。

    ID・パスワードの必要なサイトへのリンクについて教えてください。 メーリングリストの登録メンバーから、メールに記載されているリンクをクリックすると登録メンバー用の会員サイトに移動するのにその都度ID・パスワードを入力するのは面倒だという意見が出ました。 そこで、ID・パスワードを入力しないでも同じページを閲覧できるリンクの記入方法等はあるでしょうか? http://ユーザー名:パスワード@URLの形式はIEで使えなくなってしまっていますし。。。 ホームページを公開しているサーバの設定に関することでも結構ですのでどなたか教えていただけないでしょうか。 よろしくお願いします。

  • POSTでリストを送りたい

    こんばんは。 以下のようなjspより入力した項目をjavascriptで取得し URLとして送信したいのですが、Listを渡す方法が解りません。 Java6、Struts2を使用しています。 項目1,2はループで作成しており、個数は可変です。 ループはStrutsタグで作成しており、値としてはList<Map<String, Object>>型です。 この型で帰すことが出来るのが一番理想ですが、Listで返却すら出来ない状態です。 <tr>  <td>   項目1  </td>  <td>   <input type="radio" name="type" value="0" checked>   <input type="radio" name="type" value="1">   <input type="text" id="id1" >  <td> </tr> <tr>  <td>   項目2  </td>  <td>   <input type="radio" name="type" value="0" checked>   <input type="radio" name="type" value="1">   <input type="text" id="id2" >  </td> </tr> ----------------------------- js var list = new Array(); for(var i = 1; i <= size; i++){ list[i] = $("id" + 1).val(); } ----------------------------- URL=http://localhost/index!update?type=1&id=list ----------------------------- java index{ Integer _id=null; List<Object> _type=null;  setId(Integer id){_id = id}  getId(){return _id}  setType(List<Object> list){_type = list}  getType(){return _type;}  update(){      System.out.println("ID:" + _id + " List1:" + _type[0]);  } } ------------------------------- 文字や数値であれば下のような感じで渡すことが出来ます。 URL=http://localhost/index!update?type=1&name="あああ" ----------------------------- java index{ Integer _id=null; String _type=null;  setId(Integer id){_id = id}  getId(){return _id}  setType(String list){_type = list}  getType(){return _type;}  update(){      System.out.println("ID:" + _id + " List:" + _type);  } } ------------------------------- 解る方いらっしゃいましたらよろしくお願いいたします。 不明点等ございましたら追記させていただきます。

  • 情報が漏れないか心配です

    今度知り合いの家にしばらくの間居る事になりました。 しかし分けあって、どうしてもオークションを使うようになりそうです。 知り合いの家にはPCはありますが、 そこでID、パスワードを入力してその情報が漏れないか心配です。 「次回からIDの入力を省略(Yahoo!)」というところにチェックをしないで、 その後ブラウザ履歴を消去すればいいと思いますが、 これでそのPCからID等の情報は完全に消去されるのでしょうか?

  • yahooID保存ができない

    yahooのログインの際、 「次回からIDの入力を省略」にチェックしていますが、 再度ログインの際入力が必要になります。 オートコンプリートの設定は確認しています。 OSはwindows2000proです。 他のサイトでは反映されているようです。 よろしくお願いします。

  • ヤフオクで新規から質問ありIDリンクが見れない

    ヤフオクで新規IDから質問がありました。 普通は、IDをクリックすれば相手の評価・出品リスト・自己紹介のページに跳べますよね。 でもリンクにすらなってなく、ネットでID検索しても情報がありません。 今までも新規から質問を受けたことがありますが、リンクに繋がってました。 何が原因か分かりますか? その質問の内容は嫌がらせです・・・ 新規IDで質問してからID削除で逃走とか、考えられるでしょうか。 同じ経験のある方、事情を知ってる方、教えて下さい。 宜しくお願いします。

  • 非リンクでブックマーク

    非リンクでブックマーク ブックマークを増やして被リンク数をアップさせる目的でヤフー新規登録→ヤフーブックマーク登録を繰り返しました。その結果かどうかわからないのですが、今までの検索順位より下がってしまい、どうしたらよいか困っています。同じIPからの過度な被リンクはスパムと認識されると聞いたことがありますが、 本当でしょうか? ヤフーやグー、その他の大手検索エンジンでIDを50ぐらい作り、全て自分のサイトにブックマークしました。メールで届いたIDなどの情報は全て削除してしまったので、ブックマーク解除もできません。 純粋な被リンクを増やせば再度順位を上げることは可能でしょうか? いい方法があれば教えていただきたいと思います。 よろしくお願いいたします。

    • 締切済み
    • SEO
  • C言語(BCB)で双方向リストを操作する方法

    Borland C++ Builder5 でプログラミングしています。 親Formで、ファイルを読み、双方向線形リストを作っています。 子Form(ダイアログ)で、この線形リストにノードを追加したいのですが、うまくコンパイル出来ません。 どなた様か、ご指導お願いします。 まず、構造体として次のように定義しています。(Form1のヘッダーファイル) typedef struct _UkeM{ char id[7]; // 途中略 struct _UkeM *beforP; struct _UkeM *nextP; } UkeM; UkeM *UkeTop, *UkeNow, *UkeEnd; 当然これらの定義は、子Formでも操作したいので、public: として定義されています。 親Formで領域を確保するには、 UkeNow = new UkeM; と実行し、最尾ノードのnextPなどにアドレスを格納しています。 この親Formでの処理はコンパイルも通り正しく実行されています。 さて、子Formで、このリストにノードを作ってつなげたい、と思っています。 子Formでは、単純に Form1->UkeNow = new Form1->_UkeM; とやってみたのですが、「型名が必要」というエラーで通りません。 どうも、newの右側が良くないようです。 子Formで、このリストを参照するだけなら全く問題なく操作できています。 (例えば、Label1->Caption = Form1->UkeNow->id;) newだけがうまく出来ません。 子Formでのnewのやり方についてご指導をお願いします。

  • 現在 皆様に助けて頂きながらリストを作成中なんですが、

    現在 皆様に助けて頂きながらリストを作成中なんですが、 根本的な問題がある事に今気付きました。。。 実は、Sheet1に全ての情報を入力するフォームみたいなモノを作成して その入力したものが、リスト形式で Sheet2に表示される様にしてました。 が、 今気が付いたのですが、Sheet1に入力したデータをSheet2に表示は出来ますが、 保存後、次回そのファイルを開いた時に、Sheet1のフォームに新たな情報を入力した時に、どうやったら自動で Sheet2の前回の入力された表の次の段に、自動で新たな情報が掲載されリストとして作成されるか分りません。 もしかしてこれは アクセスを使わないと出来ないのでしょうか? 色々とお教え頂きました方々には申し訳ない気持ちなのですが、 もしアクセスじゃないと出来ない場合は、 素人同然なものでごめんなさい。。。(・へ・)。 ご存知方教えて下さい。

  • JAVAにて認証情報が保存出来ません

    お世話になっております。 会社の環境ですが、JAVAの認証画面で、パスワードリストへの保存が毎回クリアされてしまう現象が起こっております。 同様の事例をご存知でしたら、ご助言頂けますと幸いです。 (なお、私は情報システム部門のサポートを担当しております。) <環境>  会社で使用しているPCです。  ・WINDOWS XP SP3  ・各自、ドメイン参加  ・使用ブラウザ    FireFox(通常ブラウザ)、IE7(特定のサイトのみ接続許可)    プロキシ経由接続しています。(自動プロキシ設定スクリプト) <問題のサイト>  ・とある銀行系サイト  ・SunJavaのインストールが必要。JAVA(TM)6 Update14 をインストール済み。  ・動作保証:IE(よって、IEからの接続を許可しています。) <事象>  (1) 経理部の者が銀行系サイトに接続するため、IEを起動します。    その際、プロキシサーバー接続用のユーザー名・パスワードを要求されますが、    「パスワードを記憶する」にチェックを付けておりますので、通常は意識せず    「OK」ボタンで進みます。  (2) 銀行系サイトに接続すると、トップページが表示されると同時に、    「認証が必須です」というJAVAのウィンドウが起動し、再度プロキシ用    ユーザー名・PWを要求されます。  (3) ここで、ユーザー名・PWを入力し、「このパスワードをパスワードリストに保存」へ    チェックを付けます。    その後は、銀行系のサイトへログインし、問題なく動作しています。  (4) しかし、PC再起動などにより一度ネットワークを切断し、再度銀行系サイトへ    接続すると、またJAVAの「認証が必須です」というウィンドウが起動し、    先ほど入力し保存したはずのユーザー名・PWが空の状態となります。    何度保存を繰り返しても同じです。 IEのユーザー名・PWは保存出来ても、JAVA側では保存されません。 パスワードリストがどのファイルに当たるのか、どこに実際保存されているのかが分からず、 何か書き込み権限などが必要なのかと思い、C:\Program Files\Java\jre6 フォルダなどに そのユーザーアカウントのフル権限を付けてみたりしましたが、結果は変わりません。 また、Javaコントロールパネルの設定にて、それらしき設定を見つけることが出来ません。 なお、本サイト使用にあたるシステム要件に対し、PCの環境は問題ございません。 最終的には銀行のサイト管理者に聞くしかないかと思うのですが・・・。 ご存知の方がいらっしゃいましたら、教えて頂けますでしょうか。 何卒よろしくお願い致します。