是否将更改(永久)保存在arraylist中?

rqcrx0a6  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(330)

有可能吗?例如,一个用户向arraylist(bufferedreader进程)添加了一个新的项/元素,肯定会发生变化。我的问题是,有没有可能,即使用户对arraylist做了很多次更改,它也会永久存在,即使他们关闭程序并再次打开它,它也会一直存在。
注意:不使用.txt
很抱歉问这样的问题,但我真的很好奇。谢谢您!

2w3rbyxf

2w3rbyxf1#

如果您的arraylist经常
保存在文件系统或数据库中。
这就是你需要做的。

watbbzwu

watbbzwu2#

使用的arraylist对象只是程序的一个变量。虽然您的程序保留对该变量的引用,但一旦您关闭程序,该变量将被禁用。如果要将信息保存在需要使用文件或数据库的变量中,则不能存储java变量。

4ioopgfo

4ioopgfo3#

当程序停止时,它使用的所有内存都会被释放,包括您的arraylist。除了不关闭程序外,这是不可能的。如果你真的需要持久的数据结构,你将不得不写它到硬盘驱动器不知何故。
你要求不要使用.txt。好吧,没关系,但是你必须在某处创建一个文件来存储这些数据。
幸运的是,arraylist是可序列化的。只要其中的元素是可序列化的,就可以使用 writeObject ,如下所示:

try {
    FileOutputStream fos = new FileOutputStream(filename);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(arraylist);
    oos.close();
} catch(Exception e) {
    e.printStackTrace();
}

然后可以使用 readObject .

ArrayList<Data> list;
try {
    FileInputStream fis = new FileInputStream(filename);
    ObjectInputStream ois = new ObjectInputStream(fis);
    list = (ArrayList<Data>) ois.readObject();
    ois.close();
} catch(Exception e) {
    e.printStackTrace();
}

请注意,存储在此arraylist中的对象也需要是可序列化的。这意味着你必须做出决定 writeObject 和一个 readObject 方法,如果您创建了这些类。

1zmg4dgp

1zmg4dgp4#

如果我知道您不允许使用文本文件以csv格式存储数据,那么您或您的老师可能需要序列化/反序列化;-),想要或想要你做什么。
阅读有关objectoutputstream和objectinputstream的信息,并尽最大努力。这里有一个小例子。

相关问题