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

那可能吗? 例如,用户在arraylist(bufferedreader进程)中添加了一个新项目/元素,当然,会发生变化。 我的问题是,即使用户多次对arraylist进行更改,它也可能永久存在,即使他们关闭程序并打开它,直到那里。

注意:不使用.txt

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

程序停止时,将释放它使用的所有内存,包括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 list; try { FileInputStream fis = new FileInputStream(filename); ObjectInputStream ois = new ObjectInputStream(fis); list = (ArrayList) ois.readObject(); ois.close(); } catch(Exception e) { e.printStackTrace(); } 

请注意,存储在此ArrayList中的对象也需要是可序列化的。 这意味着如果您创建了这些类,则必须为它们创建writeObjectreadObject方法。

如果你经常使用ArrayList,这是可能的
持久存储在文件系统或数据库中。
这是你需要做的。

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

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

阅读ObjectOutputStream和ObjectInputStream,并尽力而为。 这是一个小例子。