我正在为我的高级Java类开发一个项目,作业说他想要我们 将一个对象发送到一个文件,这很容易,但他也希望该文件是人类可读和可编辑的。我3天前给他发了一封电子邮件,他没有回复,所以 由于该项目将在3天内完成,因此我陷入困境之中。
所有聪明的程序员都能够让我知道显然我被遗忘的秘密。
如何将对象发送到类似英语的文件?
我希望能够同时读取和写入待办事项 文件。我看到我们的应用程序看起来像:
- 首次启动时,程序会询问用户是否存在包含待办事项的文件。如果是这样,用户将命名文件,即 程序将读入并继续。
- 当用户决定退出时,程序将提示用户 - 询问是否应将待办事项保存到文件中 - 如果是,则 用户将命名该文件,程序将把它们写出来 这种方式可以再次阅读它们。
醇>我希望这些文件是人类可读的(并且可编辑)。没有二进制数据。 不算数我给你的建议是在某个地方有一个方法 看起来像:
public ToDoItem getToDoItem(FileInputStream fis) { // ... }
和
public void writeToDoItem(FileOutputStream fos) { // ... }
答案 0 :(得分:3)
想想您的序列化模型。 ObjectOutputStream可能会写入字节,但是有另一种方法可以表示对象并通过编写人类可读文本的其他输出流写入它吗?
答案 1 :(得分:2)
这取决于您拥有的对象类型。您必须根据特定类型的数据进行定制。
例如,如果您有一个对象
String title;
List<Integer> ids;
然后你可以把它保存为JSON
{
title: 'aaaa',
ids: [ 1,2,3,4,5 ]
}
这是等价的,但比二进制ObjectOutputStream更具可读性。
同样,这不适用于所有类型的数据。
还有一个基于XML的bean序列化,它也适用于几乎所有数据,但我不会称之为人类可读的。
答案 2 :(得分:1)
您可以尝试使用JAXB。(用于XML绑定的Java体系结构) 它可以将JAXB样式对象发送到xml文件。 但是您应该首先定义XML Schema文件。 更多信息:http://jaxb.java.net/tutorial/
答案 3 :(得分:1)
想想你如何在纸上代表一个物体,以便能够明确地重建它。您可能列出了类名,然后列出每个字段名称及其当前值。如果该字段是基元,则该值将仅是原始值。如果它是引用类型,则使用此过程递归表示对象。如果是数组,则列出每个元素值。
有各种标准方法可以格式化这种表示(XML和JSON来命名一对)。关键是要使它成为纯文本表示,因此它是人类可读的。
答案 4 :(得分:0)
您想要的可读性可以是XML
或JSON
。我的回答How to create object tree from xsd in Java?
可能有助于指导您实现所需目标的方法。