如何在运行jar文件时保存对象/实例?

时间:2015-12-10 23:46:46

标签: java arraylist save instance bluej

我已经使用 BlueJ 创建了一个小程序,该程序可用作数字注册表(注册表为'排序列表')。该程序只有两个类:一个用作注册表中条目的模板,作为回报,第二个类中的 ArrayList 表示管理所有条目的类。例如。用户可以通过控制台创建新条目,然后搜索正确的条目并通过控制台读取详细信息,因此这些条目是第一类"条目"的实例

现在我已经导出了。 jar ,我可以使用控制台模拟中的所有功能,但由于实例并未实际保存,而只是一个< em> session 这个程序没有任何有用的功能。我不知何故需要保存那些创建的实例,以便每次运行程序时都将它们放在ArrayList 中。 我正在寻找类似于&#34; 拯救世界&#34;功能在 Greenfoot 中完成。

我已经读过你可以借助BlueJ中的测试类来保存对象:Saving Objects with the testclass。但问题是,我实际上并不能看到&#34;那些条目,因为它们存储在ArrayList中,后来我想完全独立地运行程序(即没有BlueJ但是.jar)。

有人知道如何保存这些实例并在以后退出并再次运行程序时使用它们吗?

2 个答案:

答案 0 :(得分:0)

要存储所有实例,您可以选择以下方法之一:

  1. 使用Java Serialisation API保存到文件 - 但是,您需要在所有类中实现Serializable接口,

  2. 使用xmljsonGSON等文件库保存到JacksonJAXB文件

    < / LI>
  3. 使用ORMJPA,nosql等JDO保存到数据库

答案 1 :(得分:0)

我必须去看Greenfoot "Save the world"的意思。

我认为您正在寻求使用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对象写入文件。