求帮助 为什么只读取了第一次写入的数据 后面写入的数据写入了但是读不出来

/*首先D盘根目录下创建students.txt文件(没有D盘或其它特殊情况的同学可以选择在其它盘符下创建)。 接收控制台输入的学生信息实例化学生对象Student,将对象装入ArrayList<Student>集合中。使用对象流能够将集合写入students.txt文件,也要能从students.txt文件中反序列化得到集合,进而获得学生的信息。 完成复制students.txt功能。复制后的文件与students.txt放在相同目录下,名为students拷贝.txt。(二)首先D盘根目录下创建students.txt文件(没有D盘或其它特殊情况的同学可以选择在其它盘符下创建)。 (三)接收控制台输入的学生信息实例化学生对象Student,将对象装入ArrayList<Student>集合中。使用对象流能够将集合写入students.txt文件,也要能从students.txt文件中反序列化得到集合,进而获得学生的信息。(四) 完成复制students.txt功能。复制后的文件与students.txt放在相同目录下,名为students拷贝.txt。我写的代码 为什么读取时只读取了第一次输入的数据啊 以后输入的读取不出来 拜托*/


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test1 {
       

	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		
		Scanner sc=new Scanner(System.in);		
		FileOutputStream file=new FileOutputStream("students.txt");
		while(true) {
				System.out.println("请选择序号:1.向文件写入学生信息 2.读文件显示学生信息 3.退出");
				int n=sc.nextInt();
				List<Student> list=new ArrayList<>();
				switch (n) {
				case 1: 
					ObjectOutputStream oos=new ObjectOutputStream(file);
					System.out.println("请输入学生的姓名,年龄和性别逗号分隔(例如:张三,12,男)");
					String all=sc.next();
					String arr[]=all.split(",");
					String name=arr[0];					
					int	age=Integer.parseInt(arr[1]);					
					String gender=arr[2];						
					list.add(new Student(name,age,gender));					
					oos.writeObject(list);
					oos.flush();					
					if(oos!=null) {
						oos.close();	
					}				
					break;
				case 2:
					ObjectInputStream ois=new ObjectInputStream(new FileInputStream("students.txt"));
					List<Student> list2=(List<Student>)ois.readObject();
					for (Student student : list2) {
						System.out.println(student);
					}
					
					break;
				case 3:
					ObjectInputStream newois=new ObjectInputStream(new FileInputStream("students.txt"));
					ObjectOutputStream newoos=new ObjectOutputStream(new FileOutputStream("students拷贝.txt"));
					newoos.writeObject(newois);
					System.exit(0);
					break;
				default:
					System.out.println("输入错误");
				
				}
		}
	}

}
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        File file = new File("D:\\student.txt");
        if(!file.exists()){//如果文件不存在,则新建文件
            file.createNewFile();
        }
        Scanner sc=new Scanner(System.in);
        List<Student> list=new ArrayList<>();//list移到while外面,不然每次都是新建一个list
        while(true) {
            System.out.println("请选择序号:1.向文件写入学生信息 2.读文件显示学生信息 3.退出");
            int n = sc.nextInt();
            switch(n) {
                case 1:
                    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\student.txt"));
                    System.out.println("请输入学生的姓名,年龄和性别逗号分隔(例如:张三,12,男)");
                    String all=sc.next();
                    String arr[]=all.split(",");
                    String name=arr[0];
                    int	age=Integer.parseInt(arr[1]);
                    String gender=arr[2];
                    list.add(new Student(name,age,gender));
                    oos.writeObject(list);
                    oos.flush();
                    if(oos!=null) {
                        oos.close();
                    }
                    break;
                case 2:
                    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\student.txt"));
                    List<Student> list2 = (List<Student>) ois.readObject();
                    for (Student student : list2) {
                        System.out.println(student);
                    }
                    break;
                case 3:
                    FileInputStream fis = new FileInputStream("D:\\student.txt");
                    FileOutputStream fos = new FileOutputStream("D:\\student拷贝.txt");
                    byte[] buffer = new byte[1024];
                    int num;
                    while((num = fis.read(buffer))!=-1) {//比较常用的读取字节方法
                        fos.write(buffer, 0, num);
                    }
                    if(fis!=null){
                        fis.close();//关闭流
                    }
                    if(fos!=null){
                        fos.close();//关闭流
                    }
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入错误");
                    break;
            }
        }
    }
}

/**
 * Student学生类
 */
class Student implements Serializable {

    private static final long serialVersionUID = 970661418052057274L;

    private String name;//姓名
    private int age;//年龄
    private String gender;//性别

    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "姓名:" + name + ", 年龄:" + age + ", 性别:" + gender;
    }
}

 

一次read只能读一个,read外面加一层while循环,case2判断 ois.readObject() != null 

十分感谢