yijiayi_ 2021-01-18 10:20 采纳率: 46.2%
浏览 83
已采纳

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

/*首先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("输入错误");
				
				}
		}
	}

}
  • 写回答

3条回答 默认 最新

  • qq_25376897 2021-01-18 11:51
    关注
    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;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私