【问题标题】:How to store list of workers objects in java?如何在java中存储worker对象列表?
【发布时间】:2018-07-02 06:41:45
【问题描述】:

考虑到以下条件,在 Java 中存储工作人员列表的最方便方法是什么:

  1. 每个工人都有姓名、姓氏、工资、出生日期等属性。 2.我想在需要时通过附加将它们存储在文件中。例如我今天添加到文件中的 1 个对象,明天添加 1 个,一个月内添加 3 个,依此类推。
  2. 我还想在需要时阅读它们,检索、排序、删除、编辑和执行其他操作。
  3. 我尝试使用 ObjectOutputStream 将它们存储在文件中,但问题是我需要立即存储它们,因此无法稍后追加。

所以我的问题是要实现哪种类型的存储?

【问题讨论】:

  • 到目前为止你尝试了什么?你在哪里挣扎?
  • 这是一道作业题吗?如果是这样,那不是问题,但知道它会很有用,因为如果它是一个真实的应用程序,答案可能会有所不同。
  • 我尝试使用 ObjectOutputStream 将单个对象存储到文件中,并在几个会话中将顺序对象附加到文件中。但是,当尝试使用 ObjectInputStream 读取它们时,我只能读取第一个输出对象。我想是否有一些替代方法可以将这些数据存储为对象或解决 ObjectOutputStream 追加的一些方法。
  • 这是我尝试制作的第一个真实世界应用程序。
  • 在这种情况下,为什么需要一次存储它们?您当然想适应新员工加入公司的可能性。

标签: java file object serialization


【解决方案1】:

所以这是我认为你缺少的东西:ObjectOutputStream 是一种执行序列化(将对象转换为可写值)的方法。因此,要使用 OOS,您必须在 worker 类中实现它,以允许它自己序列化。但是,由于您要存储不止一种,因此可以使用多种 java 存储机制中的一种(所有这些都实现了可序列化)。

对于这种特殊情况,我建议使用 ArrayList。将所有工作对象放在一个 ArrayList 中,然后将该列表发送到 ObjectOutputStream。然后,当您将列表从文件中拉回到您的代码中时,您可以继续向其中添加更多工作人员,然后您可以毫无问题地序列化更新的列表。

将列表拉入代码后,您可以使用myList.get(index)myList.remove(index) 以及您可以在此处找到的所有其他方法:https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

顺便说一句,我认为 ArrayList 会比普通数组更好,因为当您声明和实例化普通数组时,您必须指定数组的长度。使用 ArrayList 时,列表中可以包含任意数量的对象。

【讨论】:

  • 谢谢。听起来很合理。我会努力实现的。
【解决方案2】:

我想workers是一个结构...... 您是否考虑过使用一组工人?还是列表?

【讨论】:

  • 是的。可以说,当我将前 3 个工作人员添加到 Arraylist 列表时,将写入文件。我从文件中读取了工人,一切正常。我关闭程序。我在 5 分钟内再次打开它以添加一个新的工作人员,我将它添加到 arraylist 并且 arraylist 被写入同一个文件。尝试阅读时,我只收到 3 个第一个添加的工人,而不是 5 分钟后添加的第 4 个。
  • 当您在添加第四条记录后写回列表时,您是覆盖现有文件还是追加到它?你应该覆盖
  • 我可能是在追加。让我尝试覆盖
  • 没错,如果你重写文件内容并再次从头开始读取它应该返回它的更新版本
  • 您也可以使用 SQLite 数据库或类似的数据库并将工作人员存储在那里。从数据库中多次读取可能会有点慢,但如果你不是在移动设备上工作,这应该不是一个大问题
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 2023-03-11
  • 1970-01-01
  • 2011-08-11
  • 2020-09-30
相关资源
最近更新 更多