!283 2022-09-25 13:20 采纳率: 50%
浏览 11
已结题

使用对象流添加数据,只显示第一次添加的数据,之后的读取不出来

使用对象流往文件里添加数据,然后进行读取,只能读取出来第一次添加的数据,之后添加的数据不显示

-

public void Output(){
        Scanner scanner=new Scanner(System.in);
        ObjectOutputStream oos=null;
        List list=new ArrayList(20);
        int len=1;
        try {
            oos=new ObjectOutputStream(new FileOutputStream("person.txt",true));
            while(len!=-1){
                System.out.print("姓名:");
                String name=scanner.next();
                System.out.print("年龄:");
                int age=scanner.nextInt();
                System.out.print("金钱:");
                double balance=scanner.nextDouble();
                list.add(new person(name,age,new Account1(balance)));
                System.out.print("如果不需要继续添加请输入-1");
                len=scanner.nextInt();
            }
            oos.writeObject(list);
            oos.flush();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        finally {
            try {
                if(oos!=null){
                    oos.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
    public void Input(){
        Scanner scanner=new Scanner(System.in);
        ObjectInputStream oos=null;
        int len=1;
        try {
            oos=new ObjectInputStream(new FileInputStream("person.txt"));
            List list=(ArrayList)oos.readObject();
            Iterator iterator=list.iterator();
            while(iterator.hasNext()){
                System.out.println(iterator.next());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                if(oos!=null){
                    oos.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

自带的person类,如下,不需要做修改

public class person implements Serializable {
    static final long serialVersionUID=-12321445678l;
    String name;
    int age;
    private Account1 act;

    public person(String name, int age, Account1 act) {
        this.name = name;
        this.age = age;
        this.act = act;
    }

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

    public person() {
    }

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

    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", act=" + act +
                '}';
    }
}
class Account1 implements Serializable{
    static final long serialVersionUID=-12321445671l;

    private double balance;

    public Account1(double balance) {
        this.balance = balance;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    @Override
    public String toString() {
        return "Account{" +
                "balance=" + balance +
                '}';
    }
}


如果进行读取,只能出现第一次添加的数据,再运行添加数据,则不做显示
希望能帮忙修改一下,并说一下,为什么会出现这种情况

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-25 14:03
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月5日
  • 已采纳回答 11月27日
  • 修改了问题 9月25日
  • 创建了问题 9月25日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line