/*首先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("输入错误");
}
}
}
}
求帮助 为什么只读取了第一次写入的数据 后面写入的数据写入了但是读不出来
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 爬虫爬取网站的一些信息
- ¥15 关于vue2中methods使用call修改this指向的问题
- ¥15 idea自动补全键位冲突
- ¥15 请教一下写代码,代码好难
- ¥15 iis10中如何阻止别人网站重定向到我的网站
- ¥15 滑块验证码移动速度不一致问题
- ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
- ¥15 麒麟V10桌面版SP1如何配置bonding
- ¥15 Marscode IDE 如何预览新建的 HTML 文件
- ¥15 K8S部署二进制集群过程中calico一直报错