将更改(永久)保存在数组列表中?

Posted

技术标签:

【中文标题】将更改(永久)保存在数组列表中?【英文标题】:save changes (permanently) in an arraylist? 【发布时间】:2014-03-11 11:10:46 【问题描述】:

这可能吗?例如,用户在数组列表(缓冲读取器进程)中添加了一个新项目/元素,并且肯定会发生变化。我的问题是,即使用户对数组列表进行了多次更改,是否有可能即使他们关闭程序并再次打开它,它也会永久存在,直到那里。

注意:不使用 .txt

很抱歉提出这样的问题,但我真的很好奇。 谢谢!

【问题讨论】:

一旦应用程序关闭 JVM 中的所有内容,一切都将告别。如果您想在多个应用程序执行中保留值,则必须研究一些持久性解决方案。 “不使用 .txt”是指“不能将其存储在文件系统中”吗? ArrayList 存在于内存中。当您的应用程序终止时,您的数组列表将从内存中删除。 如果您想在关闭应用程序后保留一些数据,那么您需要将数据保存在某个地方,而该地方将是一个文件或数据库。现在如果你不想要 .txt 那么你可以序列化/反序列化你的 java 对象 【参考方案1】:

当程序停止时,它使用的所有内存都会被释放,包括您的 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。

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 方法。

【讨论】:

【参考方案2】:

如果您的 ArrayList 经常出现,这是可能的 保存在文件系统或数据库中。 这是你需要做的。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

如果我了解您不允许使用文本文件以 CSV 格式存储数据,那么序列化/反序列化可能是您或您的老师 ;-) 想要或希望您做的事情。

阅读ObjectOutputStream 和ObjectInputStream 并尽力而为。 Here's a little example.

【讨论】:

以上是关于将更改(永久)保存在数组列表中?的主要内容,如果未能解决你的问题,请参考以下文章

将鼠标悬停在 li 上时更改图像并使用 CSS 永久保存该图像

在 Documents 文件夹中写入文件列表并保存在内存中

Python保存列表更改

如何在 Python 中保存二维数组(列表)?

如何将各种尺寸的数组的Python列表保存到mat文件[重复]

在 Android 中重新启动时保存更改字符串