簡體   English   中英

運行jar文件時如何保存對象/實例?

[英]How do I save objects/instances while running a jar-file?

我用BlueJ創建了一個小程序,該程序可以用作數字注冊表(注冊表在“排序列表”中)。 該程序只有兩類:一類用作注冊表中條目的模板,而后者由第二類中的ArrayList表示,一類管理所有條目。 例如,用戶可以通過控制台創建新條目,然后搜索正確的條目並通過控制台讀取詳細信息,因此,這些條目是第一類“條目”的實例

現在,我已導出。 jar和我確實可以使用控制台模擬中的所有功能,但是由於實際上並未保存實例,而是僅在一個會話中保存了該程序的有用功能。 我不知何故需要保存那些創建的實例,以便每次運行程序時它們都已位於ArrayList中 我正在尋找類似Greenfoot中保存世界 ”功能的東西。

我讀過您可以在BlueJ中使用testclass來保存對象:使用 testclass 保存對象 但是問題在於,由於這些條目存儲在ArrayList中,因此我實際上無法“看到”這些條目,而我后來想完全獨立地運行該程序(即,沒有BlueJ但有.jar)。

有人知道如何保存這些實例並在以后退出並再次運行程序時使用它們嗎?

要存儲所有實例,可以使用以下方式之一:

  1. 使用Java序列化API保存到文件-但是,您需要在所有類中實現Serializable接口,

  2. 使用GSONJacksonJAXB等庫將文件另存為xmljson

  3. 使用一些ORM(例如JPAJDO ,nosql等)保存到數據庫。

我必須去看看Greenfoot的“拯救世界”是什么意思。

我認為您正在尋找使用Java序列化的方法。

程序:

public static void main(String[] args) throws IOException, ClassNotFoundException {
    File file = new File("address.ser");
    file.deleteOnExit();
    FileOutputStream fout = new FileOutputStream(file);

    String addressForWriting = "123 Fake Street";
    try ( ObjectOutputStream oos = new ObjectOutputStream(fout) ) {
        oos.writeObject(addressForWriting);
    }

    FileInputStream fin = new FileInputStream(file);
    try ( ObjectInputStream ois = new ObjectInputStream(fin) ) {
        String addressForReading = (String) ois.readObject();
        System.out.println(addressForReading);
    }
}

輸出:

123 Fake Street

在這種情況下, String實現了Serializable接口,該接口允許Java將其作為對象寫出,然后作為對象讀回。 我對你的兩節課一無所知。 但是,如果讓他們實現Serializable接口(包括其實例變量),則應該能夠將所有Java對象寫到文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM