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

时间:2014-03-11 11:10:47

标签: java arraylist save

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

注意:不使用.txt

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

4 个答案:

答案 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中的对象也需要是可序列化的。这意味着,如果您创建了这些类,则必须为它们制作writeObjectreadObject方法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

了解ObjectOutputStreamObjectInputStream并尽力而为。 Here's a little example.