java模擬數據持久化 原

數據持久化可:把程序中的數據以某種形式保存到某存儲介質中,以達到持久化的目的(把數據保存到硬盤或數據庫中)

序列化(Serialization)也叫串行化,是java內置的持久化java對象機制,只要某個類實現了java.io.Serialization接口,就能夠使用java.io.ObjectOutputStream將該類對象以二進制字節碼的形式寫到硬盤上,並能夠使用java.io.ObjectInputStream將該對象從硬盤上還原。這樣,即使重啓電腦,該java對象也能從硬盤上恢復

模擬person對象數據持久化——保存到文件||數據庫||其他(保存數據、查找數據)

Person.java

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Person implements Serializable{
    private static final long serialVersionUID = 1L;
    private String name;//姓名
    private List<String> hobby = new ArrayList<String>();//愛好
    //生成所有屬性getter和setter的方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<String> getHobby() {
        return hobby;
    }
    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }
    //重寫toString方法
    @Override
    public String toString() {
        return "愛好:" + hobby + ", 姓名" + name;
    }
}
 

Console.java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.Arrays;

//導入自定義Person包

public class Console {

    //當前文件夾,即當前項目的存放路徑
    public static File directory = new File(System.getProperty("user.dir"));
    //控制檯輸入
    public static String systemRead()throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        return reader.readLine();
    }
    //將person對象持久化到硬盤上,模擬以文件的形式存儲數據
    public static void persist(Person person) throws IOException{
        File file = new File(directory,person.getName()+".txt");
        ObjectOutput output = new ObjectOutputStream(new FileOutputStream(file));
        //保存對象
        output.writeObject(person);
        output.close();
        System.out.println("文件保存在:"+file);
    }
    //將person對象從硬盤上恢復,從該文件讀出數據
    public static Person load(String name) throws Exception{
        File file = new File(directory,name+".txt");
        if(!file.exists()){
            return null;
        }
        ObjectInput ins = new ObjectInputStream(new FileInputStream(file));
        //讀取對象
        return (Person)ins.readObject();
    }
    /**
     * @param args
     */
    public static void main(String[] args)throws Exception {
        // TODO Auto-generated method stub
        System.out.println("人員信息管理系統.");
        System.out.println("1.輸入'save'開始錄入人員信息.");
        System.out.println("2.輸入'load'開始查詢人員信息");
        System.out.println("3.輸入'exit'退出系統");
        System.out.println("請輸入(回車結束輸入):");
        //獲取用戶輸入信息
        String menu = systemRead();
        //如果輸入的爲save,則繼續輸入人員的姓名、愛好
        if("save".equalsIgnoreCase(menu)){
            System.out.println("請輸入要錄入的人員姓名:");
            //獲取輸入人員的姓名
            String name = systemRead();
            System.out.println("請輸入'"+name+"'愛好,用','隔開:");
            //獲取輸入人員的愛好
            String hobbies = systemRead();
            Person person = new Person();
            person.setName(name);
            person.setHobby(Arrays.asList(hobbies.split(",")));
            //持久化人員對象
            persist(person);
           //如果輸入的爲load,則繼續查找人員的姓名,然後根據姓名查詢該人員的信息
        }else if("load".equalsIgnoreCase(menu)){
            System.out.println("請輸入要查找的人員姓名:");
            //獲取輸入人員的姓名
            String name = systemRead();
            //根據姓名查詢人員,並返回人員相關信息
            Person person = load(name);
            if(person == null){
                System.out.println("沒有此人員信息");
            }else{
                System.out.println("查詢結果"+person);
            }
            //如果輸入的爲exit,則退出程序
        }else{
            System.out.println("無效輸入:"+menu);
            System.out.println();
            //繼續執行main主函數
            main(null);
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章