有可能吗?例如,一个用户向arraylist(bufferedreader进程)添加了一个新的项/元素,肯定会发生变化。我的问题是,有没有可能,即使用户对arraylist做了很多次更改,它也会永久存在,即使他们关闭程序并再次打开它,它也会一直存在。注意:不使用.txt很抱歉问这样的问题,但我真的很好奇。谢谢您!
2w3rbyxf1#
如果您的arraylist经常保存在文件系统或数据库中。这就是你需要做的。
watbbzwu2#
使用的arraylist对象只是程序的一个变量。虽然您的程序保留对该变量的引用,但一旦您关闭程序,该变量将被禁用。如果要将信息保存在需要使用文件或数据库的变量中,则不能存储java变量。
4ioopgfo3#
当程序停止时,它使用的所有内存都会被释放,包括您的arraylist。除了不关闭程序外,这是不可能的。如果你真的需要持久的数据结构,你将不得不写它到硬盘驱动器不知何故。你要求不要使用.txt。好吧,没关系,但是你必须在某处创建一个文件来存储这些数据。幸运的是,arraylist是可序列化的。只要其中的元素是可序列化的,就可以使用 writeObject ,如下所示:
writeObject
try { FileOutputStream fos = new FileOutputStream(filename); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(arraylist); oos.close(); } catch(Exception e) { e.printStackTrace(); }
然后可以使用 readObject .
readObject
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 方法,如果您创建了这些类。
1zmg4dgp4#
如果我知道您不允许使用文本文件以csv格式存储数据,那么您或您的老师可能需要序列化/反序列化;-),想要或想要你做什么。阅读有关objectoutputstream和objectinputstream的信息,并尽最大努力。这里有一个小例子。
4条答案
按热度按时间2w3rbyxf1#
如果您的arraylist经常
保存在文件系统或数据库中。
这就是你需要做的。
watbbzwu2#
使用的arraylist对象只是程序的一个变量。虽然您的程序保留对该变量的引用,但一旦您关闭程序,该变量将被禁用。如果要将信息保存在需要使用文件或数据库的变量中,则不能存储java变量。
4ioopgfo3#
当程序停止时,它使用的所有内存都会被释放,包括您的arraylist。除了不关闭程序外,这是不可能的。如果你真的需要持久的数据结构,你将不得不写它到硬盘驱动器不知何故。
你要求不要使用.txt。好吧,没关系,但是你必须在某处创建一个文件来存储这些数据。
幸运的是,arraylist是可序列化的。只要其中的元素是可序列化的,就可以使用
writeObject
,如下所示:然后可以使用
readObject
.请注意,存储在此arraylist中的对象也需要是可序列化的。这意味着你必须做出决定
writeObject
和一个readObject
方法,如果您创建了这些类。1zmg4dgp4#
如果我知道您不允许使用文本文件以csv格式存储数据,那么您或您的老师可能需要序列化/反序列化;-),想要或想要你做什么。
阅读有关objectoutputstream和objectinputstream的信息,并尽最大努力。这里有一个小例子。