Java 如何使用随机访问文件将数据保存到文本文件中,然后更新这些数据?

Java 如何使用随机访问文件将数据保存到文本文件中,然后更新这些数据?,java,randomaccessfile,Java,Randomaccessfile,我很困惑如何保存我的数据,例如我有一个(学生ID、姓名、姓氏)唯一的学生ID是整数,我想在按下(AddButton)时将这些数据保存到文本文件中,然后在按下(UpdateButton)时更新这些数据,数据已保存,但每次保存的数据(括号出现在文件中)以及按(更新按钮)时,数据不会返回到我的文本字段进行更新时,我都使用矢量数组 class BtnListenerAdd implements ActionListener{ public void actionPerformed(ActionEve

我很困惑如何保存我的数据,例如我有一个(学生ID、姓名、姓氏)唯一的学生ID是整数,我想在按下(AddButton)时将这些数据保存到文本文件中,然后在按下(UpdateButton)时更新这些数据,数据已保存,但每次保存的数据(括号出现在文件中)以及按(更新按钮)时,数据不会返回到我的文本字段进行更新时,我都使用矢量数组

 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() );
            }
        }

    }


  }
类btnlistenerad实现ActionListener{
已执行的公共无效操作(操作事件a){
如果(a.getSource()==btnAdd){
学生s=新学生(tfname.getText(),tflasname.getText());
s、 number=Integer.parseInt(tfno.getText());
myVector.add(s);
//系统输出打印项次;
试一试{
java.io.RandomAccessFile raf=
新的java.io.RandomAccessFile(“e:\\random.txt”、“rw”);
对于(int i=0;i对于(int i=0;i您应该使用构造函数
FileOutputStream(File File,boolean append)
它能够以追加模式将流初始化到文件中,从而将数据追加到文件末尾。

您不应该使用RandomAccessFile来存储文本。相反,它应该用于存储等长记录。如果您只想将文本追加到文本文件的末尾,那么请按照@Jack在其回答中建议的操作--append到文件(1+到他)

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


另外,括号很可能出现在输出中,因为您告诉它们要在那里
学生的方法是什么样的?有些东西告诉我它会输出括号。从该方法中去掉括号。

在征求免费建议时,如果你把精力放在发布格式良好且易于阅读的代码上,我们将不胜感激。毕竟,你是在征求志愿者的努力,因此要求你将其放在括号中并不过分为了使我们的工作不会比需要的更困难,我们付出了一些努力。例如,你的代码缩进到处都是。这是怎么回事?还有,你要求写一个RandomAccessFile,但是你的问题提到了一个文本文件,而你的代码两个都没有。现在我很困惑。很抱歉,这是我的错误,我解决了这个项目通过两种方式,但实际上应该放在随机访问文件部分,而不是这一部分。如果我说的是为什么整型数不显示在文本文件中,那么请编辑您的帖子,告诉我们您是如何“解决”的这个,告诉我们如果你仍然有问题,并清楚地解释问题是什么,只显示干净的格式良好的代码,并删除所有提及RandomAccessFile的内容,特别是在你的线程标题中。但是为什么整数不显示在文件中?你认为我可以回答你的问题,甚至不知道某个地方有一个
int
想在括号中显示我所做的事情吗?@user1883699:首先回答我的问题:你的学生类的
toString()
是什么样子的?这是我的学生类公共类学生{int number;String name;String姓氏;String dept_no;Student(String sName,String sSurname){name=sName;name=sSurname;}每次我把这些信息(例如学生ID、姓名m姓氏)作为记录名保存在文本文件中时,我都希望