-2

たとえば、データを保存する方法がわかりません (Student ID , Name , Surname) 唯一の学生 ID は整数です。(AddButton) を押したときにこれらのデータをテキスト ファイルに保存してから、これらを更新します。 (UpdateButton) を押すとデータが保存されますが、保存されたデータがファイルに表示されるたびにベクトル配列が使用され、(UpdateButton) を押してもデータが TextField に返されずに更新されます.

 class BtnListenerAdd implements ActionListener{
 public void actionPerformed(ActionEvent a) {

        if (a.getSource()==btnAdd){
            Student s=new Student(tfname.getText(),tfsurname.getText());
            s.number=Integer.parseInt(tfno.getText());
            myVector.add(s);
               //System.out.println(s);

            try{
                java.io.RandomAccessFile raf =
                               new java.io.RandomAccessFile("e:\\random.txt", "rw");


                    for (int i = 0; i < myVector.size(); i++) {
                      raf.writeChars(myVector.toString());
                    }

                    raf.seek(0);
                    while (raf.getFilePointer() < raf.length()) {
                      System.out.println(raf.readChar());
                    }

                raf.close();
            }catch(Exception e){
                System.out.println( e.toString() );
            }
        }

        if (a.getSource()==btnList){
            ta1.setText("");
            for (Student s : myVector) {
                ta1.append(s.toString()+ "\n"); 
            }
        }           
        }

     }


  class BtnListenerUpdate implements ActionListener{

    public void actionPerformed(ActionEvent s) {

        if (s.getSource()==btnUpdate){
            Student l=new Student(tfname.getText(),tfsurname.getText());
            l.number=Integer.parseInt(tfno.getText());
            myVector.add(l);


            try{
                java.io.RandomAccessFile raf = 
                              new java.io.RandomAccessFile("e:\\random.txt", "rw");

                for(int i=0; i <myVector.size(); i++) {
                    raf.writeChar(myVector.size());
                }

                raf.seek(0);
               int no= raf.readInt();
               tfno.setText(no +  "");
               System.out.println(no);


               String nam = "";
                for(int x=0; x<50; x++){
                    nam += raf.readChar();
                }


                nam = "";
                for(int x=0; x<50; x++){
                    nam += raf.readChar();
                }


            }catch(Exception e){
                System.out.println( e.toString() );
            }
        }

    }


  }
4

2 に答える 2

1

追加モードでストリームをファイルに初期化できるコンストラクターを使用しFileOutputStream(File file, boolean append)て、ファイルの末尾を超えてデータを追加する必要があります。

于 2013-01-12T14:21:11.513 に答える
0

テキストを格納するために RandomAccessFile を使用しないでください。代わりに、同じ長さのレコードを格納するために使用する必要があります。テキスト ファイルの最後にテキストを追加するだけの場合は、@Jack の回答で推奨されているように、ファイルに追加します (1+ 彼に)。

私自身、コンストラクターの追加ブール値パラメーターを true に設定して FileWriter を使用し (Jack が示す方法と同様)、これを BufferedWriter でラップし、おそらく PrintWriter でラップします。次に、を使用して新しい行を書くことができますprintln(...)

また、角かっこは、そこにあるように指示しているため、出力に含まれている可能性があります。toString()Studentのメソッドはどのようなものですか? 何かがブラケットを出力することを教えてくれます。そのメソッドからそれらを取り除きます。

于 2013-01-12T15:36:23.470 に答える