如何将一个对象保存为文件,并从文件中读取Java对象呢?

文章通过创建一个名为Student的类,展示了如何实现Java对象的序列化和反序列化。Student类实现了Serializable接口,使得对象可以被写入文件和从文件中读取。使用ObjectOutputStream将对象写入文件,然后通过ObjectInputStream从文件中读取并恢复对象的状态。此过程在处理远程服务调用如Dubbo时特别有用,因为对象需要在网络中传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先先创建一个Student类

声明私有变量 id,name,age,并构造有参,无参,getter和setter方法以及同toStiring()方法

2.调用Student类创建一个st对象

 Student st = new Student(1,"张三",22);

3. 把对象保存为文件需要借用 ObjectOutputStream高级流

ObjectOutputStream 流用保存实现 implements Serializable接口

ObjectOutputStream是一个高级流, 将 Java 对象的基本数据类型和图形写入 OutputStream

所以在Student类后面需要添加implements Serializable接口实现序列化

为什么要实现序列化呢

我们在使用Dubbo远程调用服务框架时,需要把传输的Java对象实现Serializable接口,即让Java对象序列化,因为这样才能让对象在网络上传输。

同时方便在类中添加属性

idea中有高级工具会自动帮我们实现序列化,看下图

配置完成之后鼠标放在Student类上,然后实例化完成..

 

 

 

首先创建一个objiectIn.java进行把对象写进文件和读取文件中的对象

4.  try catch

try(){
                 
            }catch(Exception e){
                 e.printStackTrace();
            }

然后使用 ObjectOutputStream高级流,并把对象写入OutputStream

var stream =  new ObjectOutputStream(new FileOutputStream("st.dat"))

直接写入st就行,,然后它默认创建在项目中 ,最后对象就保存在文件中

stream.writeObject(st);

 

  

5,读取对象文件中的内容 

ObjectInputStream读取文件对象ObjectOutputStream写入文件对象

所以直接地区OutputStream里面文件的内容

  try (var stream = new ObjectInputStream( new FileInputStream("st.dat"))){
                  
                }catch(Exception e){
                     e.printStackTrace();
                }

 将读物的内容赋予Student类,因为对象类型为Student,所以阔以直接强转

输出读取结果

 System.out.println(sr);

输出读取的id

System.out.println(sr.getId());
           

输出读取的name

 System.out.println(sr.getName());
            

输出读取的age

 System.out.println(sr.getAge());

读出结果

 

整体代码

Student

/*
 * Copyright (c) 2020, 2023.
 *
 */

import lombok.*;

import java.io.Serial;
import java.io.Serializable;

/**
 * <p>Project: File - Object</p>
 * <p>Powered by Cyy On 2023-07-24 15:44:14</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */

public class Student implements Serializable {
     @Serial
     private static final long serialVersionUID = -1860938135581020148L;
     private  int id;
     private  String name; 
     private  int age;

     public Student() {
     }

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

     public int getId() {
          return id;
     }

     public void setId(int id) {
          this.id = id;
     }

     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 "Student{" +
                  "id=" + id +
                  ", name='" + name + '\'' +
                  ", age=" + age +
                  '}';
     }
}

ObjectIn

/*
 * Copyright (c) 2020, 2023.
 *
 */

import java.io.*;

/**
 * <p>Project: File - Object</p>
 * <p>Powered by Cyy On 2023-07-24 15:44:14</p>
 * <p>描述:<p>
 *
 * @author Cyy [210585265@qq.com]
 * @version 1.0
 * @since 17
 */
public class ObjectIn {
    public static void main(String[] args) {
        Student st = new Student(1,"张三",22);
        System.out.println(st);

        //将对象保存到文件
        // ObjectOutputStream 流用保存实现 implements Serializable
        try(var stream =  new ObjectOutputStream(new FileOutputStream("st.dat"))){
            stream.writeObject(st);

                }catch(Exception e){
                     e.printStackTrace();
                }

          //从文件中读取java对象
        try (var stream = new ObjectInputStream( new FileInputStream("st.dat"))){
            Student sr= (Student) stream.readObject();
            System.out.println(sr);
            System.out.println(sr.getId());
            System.out.println(sr.getName());
            System.out.println(sr.getAge());

                }catch(Exception e){
                     e.printStackTrace();
                }

    }

}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值