这可能吗?例如,用户在arraylist(bufferedreader进程)中添加了一个新的item /元素,肯定会发生变化。我的问题是,即使用户多次对arraylist进行更改,它也可能永久存在,即使他们关闭程序并打开它,直到那里为止。
注意:不使用.txt
很抱歉提出这样的问题,但我真的很好奇。 谢谢!
答案 0 :(得分: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
方法。
答案 1 :(得分:0)
如果你的ArrayList经常是
,这是可能的
持久存储在文件系统或数据库中
这是你需要做的。
答案 2 :(得分:0)
您使用的arraylist对象只是程序的变量。虽然你的程序保留了对这个变量的引用,但是一旦你关闭程序,变量就会消失。如果要将信息保存在需要使用文件或数据库的变量中,则无法存储java变量。
答案 3 :(得分:0)
如果我了解您不允许使用文本文件以CSV格式存储数据,则序列化/反序列化可能是您或您的老师;-),希望或希望您这样做。
了解ObjectOutputStream和ObjectInputStream并尽力而为。 Here's a little example.