汽车对象存取

题目:

        设计一个汽车类,把汽车对象存储进文件。能从文件中查找某个汽车对象并打印输出。

要求:

        使用对象流进行操作。

思路分析:

        首先定义了一个汽车类Car,包含了汽车的厂商、型号和年份等属性,并实现了序列化接口Serializable

        接着定义了一个CarManager类,其中包含了两个静态方法:saveCarfindCar

  saveCar方法用于将汽车对象保存到文件中。它通过创建ObjectOutputStream对象,并传入一个FileOutputStream对象和一个BufferedOutputStream对象来构建对象输出流。然后使用writeObject方法将汽车对象写入文件。最后,通过关闭流来释放资源。

  findCar方法用于从文件中查找某个汽车对象。它通过创建ObjectInputStream对象,并传入一个FileInputStream对象和一个BufferedInputStream对象来构建对象输入流。然后使用readObject方法读取文件中的汽车对象,进行属性比较,如果找到匹配的汽车对象,则返回该对象。当文件读取到末尾(EOFException)时表示未找到匹配的汽车对象,返回null。如果在读取文件或反序列化过程中出现异常,则打印错误信息并返回null

        最后,在Main类的main方法中,创建了两个示例汽车对象并调用CarManagersaveCar方法将其保存到文件中。然后调用CarManagerfindCar方法查找并输出其中一个汽车对象。

运行结果:

        假设程序运行后成功保存了两个汽车对象,并且要查找的汽车对象存在,那么输出结果可能如下:

2020 Toyota Camry

        如果要查找的汽车对象不存在,那么输出结果可能如下:

Car not found.

代码:

import java.io.*;

class Car implements Serializable {
    private static final long serialVersionUID = 1L;
    private String make;
    private String model;
    private int year;

    public Car(String make, String model, int year) {
        this.make = make;
        this.model = model;
        this.year = year;
    }

    public String getMake() {
        return make;
    }

    public String getModel() {
        return model;
    }

    public int getYear() {
        return year;
    }

    public String toString() {
        return year + " " + make + " " + model;
    }
}

class CarManager {
    private static final String DATA_FILE = "cars.dat";

    public static void saveCar(Car car) {
        try (ObjectOutputStream out = new ObjectOutputStream(
                new BufferedOutputStream(new FileOutputStream(DATA_FILE)))) {
            out.writeObject(car);
        } catch (IOException e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

    public static Car findCar(String make, String model, int year) {
        try (ObjectInputStream in = new ObjectInputStream(
                new BufferedInputStream(new FileInputStream(DATA_FILE)))) {
            while (true) {
                Car car = (Car) in.readObject();
                if (car.getMake().equalsIgnoreCase(make) && 
                        car.getModel().equalsIgnoreCase(model) && 
                        car.getYear() == year) {
                    return car;
                }
            }
        } catch (EOFException e) {
            return null;
        } catch (IOException | ClassNotFoundException e) {
            System.err.println("Error: " + e.getMessage());
            return null;
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car("Toyota", "Camry", 2020);
        CarManager.saveCar(car1);

        Car car2 = new Car("Honda", "Civic", 2019);
        CarManager.saveCar(car2);

        Car foundCar = CarManager.findCar("Toyota", "Camry", 2020);
        if (foundCar != null) {
            System.out.println(foundCar);
        } else {
            System.out.println("Car not found.");
        }
    }
}

总结:

        这个程序利用了Java的对象流机制来实现汽车对象的存储和查找。通过序列化和反序列化,可以将汽车对象转换为字节流并保存到文件,或者从文件中读取字节流并转换为汽车对象。        

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值