Java实现图书持久化

要求

构造图书类,包含名称(字符串)、作者(字符串)、出版社(字符串)、版本号(整数)、价格(浮点数),构造图书馆类,其中包含若干图书,用容器存储图书对象,然后定义方法void addBook(Book b)添加图书对象,定义方法void persist(),将所有图书存至本地文件books.dat里,定义方法Book[] restore() 从文件books,dat中读取所有图书,并返回图书列表数组。 main函数中构造图书馆类对象,向其中添加3个图书对象,测试其persist和restore方法。(注意,请使用对象序列化方法实现)

代码

import java.io.*;
import java.util.*;




class Book {
    String name;
    String author;
    String press;
    int no;
    double price;

    public Book(String _name, String _author, String _press, int _no, double _price) {
        this.name = _name;
        this.author = _author;
        this.press = _press;
        this.no = _no;
        this.price = _price;
    } 

    public String toString() {
        return name+" "+author+" "+press +" "+no+" "+price;
    } 
}


class Library{
    Book[] books=new Book[99999999];
    int nums=0;

    public void addBook(Book book) {
        books[nums]=book;
        nums++;
    }

    public void persist() throws IOException {
        File file=new File("./books.dat");
        if(!file.exists()){
            file.createNewFile();
        }
        FileWriter fw=new FileWriter(file);
        for(int i=0;i<nums;i++){
            fw.write(books[i].toString());
            fw.write("\n");
        }
        fw.flush();
        fw.close();
    }

    public Book[] restore() throws IOException {
        Library library = new Library();
        File file=new File("./books.dat");
        if(!file.exists()) {
            file.createNewFile();
        }
        BufferedReader input=null;
        input=new BufferedReader(new InputStreamReader(new FileInputStream("./books.dat")));
        String s=input.readLine();
        while(s!=null){
            String[] s1=s.split(" ");
            Book book=new Book(s1[0],s1[1],s1[2],Integer.parseInt(s1[3]),Double.parseDouble(s1[4]));
            library.addBook(book);
            s=input.readLine(); 
        }
        input.close();
        return library.books;
    }
}


public class Main5 {
    public static void main(String[] args) throws IOException  {
        Library library = new Library();
        library.addBook(new Book("大秦帝国1", "czk", "百花出版社", 10001, 38.88));
        library.addBook(new Book("大秦帝国2", "czk", "百花出版社", 10002, 38.88));
        library.addBook(new Book("大秦帝国3", "czk", "百花出版社", 10003, 38.88));
        library.persist();
        Book books[] = library.restore();
        for(int i=0;i<library.nums;i++){
            System.out.println(books[i].toString());
        }
    }
}

分析

  • 没什么想说的,水一水
好的,以下是代码实现: Book.java: ```java import java.io.Serializable; public class Book implements Serializable { private String name; // 名称 private String author; // 作者 private String press; // 出版社 private int version; // 版本号 private double price; // 价格 public Book(String name, String author, String press, int version, double price) { this.name = name; this.author = author; this.press = press; this.version = version; this.price = price; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", press='" + press + '\'' + ", version=" + version + ", price=" + price + '}'; } } ``` Library.java: ```java import java.io.*; import java.util.ArrayList; import java.util.List; public class Library { private List<Book> books; // 图书列表 public Library() { books = new ArrayList<>(); } // 添加图书 public void addBook(Book b) { books.add(b); } // 持久化保存图书 public void persist() throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("books.dat")); oos.writeObject(books); oos.close(); } // 从文件中读取所有图书 public Book[] restore() throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("books.dat")); List<Book> list = (List<Book>) ois.readObject(); ois.close(); return list.toArray(new Book[list.size()]); } } ``` Main.java: ```java import java.io.IOException; public class Main { public static void main(String[] args) { Library library = new Library(); // 添加图书 library.addBook(new Book("Java编程思想", "Bruce Eckel", "机械工业出版社", 4, 99.0)); library.addBook(new Book("深入理解Java虚拟机", "周志明", "机械工业出版社", 2, 89.0)); library.addBook(new Book("算法导论", "Thomas H. Cormen", "机械工业出版社", 3, 69.0)); // 持久化保存图书 try { library.persist(); System.out.println("成功持久化保存图书到文件books.dat"); } catch (IOException e) { System.out.println("持久化保存图书失败:" + e.getMessage()); } // 从文件中读取所有图书并输出 try { Book[] books = library.restore(); System.out.println("成功从文件books.dat中读取所有图书:"); for (Book book : books) { System.out.println(book); } } catch (IOException | ClassNotFoundException e) { System.out.println("从文件中读取图书失败:" + e.getMessage()); } } } ``` 在运行程序前,请确保程序所在的目录下存在books.dat文件。运行程序后,程序会先添加3本图书,然后持久化保存到文件books.dat中。接着,程序会从文件books.dat中读取所有图书并输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗯嗯你说的对

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值