将更改(永久)保存在数组列表中?
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 永久保存该图像