-2

我很困惑如何保存我的数据,例如我有(学生 ID,姓名,姓氏)唯一的学生 ID 是整数,我想在按下(添加按钮)时将这些数据保存到文本文件,然后我想更新这些按下(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+)。

我自己,我会使用 FileWriter,并将构造函数的 append 布尔参数设置为 true(类似于 Jack 向您展示的方式),并将其包装在 BufferedWriter 中,可能由 PrintWriter 包装。然后你可以使用println(...).

此外,括号可能在您的输出中,因为您告诉他们在那里。toString()Student 的方法是什么样的?有些东西告诉我它输出括号。从那种方法中摆脱它们。

于 2013-01-12T15:36:23.470 回答