!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 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测