我正在使用这个XML转换器,但我没有得到对象标头来包装每个对象的属性......我无法在编码器类中找到一个方法来执行此操作。
代码遍历我的数组并列出所有非空的对象。
FileOutputStream os = new FileOutputStream("C:\\Users\\David Laptop\\Documents\\Doc1.xml");
XMLEncoder encoder = new XMLEncoder(os);
for( int x = 0; x < people.length;x++)
if (people[x] != null)
{
//header here?
encoder.writeObject(people[x].getName());
encoder.writeObject(people[x].getTelephoneNumber());
encoder.writeObject(people[x].getEmailAddress());
}
}
encoder.close();
我得到了这个结果:
<?xml version="1.0" encoding="UTF-8" ?>
<java version="1.7.0_40" class="java.beans.XMLDecoder">
string
dad</string string 35235 /string
string email /string
</java>
如果我做了更多的对象条目,那么它最终成为一个大的列表并不是很有用,因为我要实现的另一个函数是从XML文件读取到数组中...任何有关它的帮助也将是有用!
编辑:基于给出的答案的新信息:
如果没有无参数构造函数,没有办法实现这一点吗?我已经将Serializable实现到两个类中以便进行测量......我使用此行添加新对象:
mybook1.addRecord(new newPerson(Name,telephoneNumber,emailAddress));
使用它:
public void addRecord(newPerson c)
{
people[numOfRecords] = c;
numOfRecords++;
}
下面是对象本身:
public class newPerson implements java.io.Serializable
{
private String Name;
private String telephoneNumber;
private String emailAddress;
public newPerson(String n, String t, String e)
{ //local variables n,t,e only used in this method
Name = n;
telephoneNumber = t;
emailAddress = e;
}
有什么建议吗?
答案 0 :(得分:0)
序列化对象实例变量将导致一个难以进行的主进程,您将被迫逐个解码这些值。
在序列化整个People
对象时处理更明智,更容易:
FileOutputStream os = new FileOutputStream("C:\\Users\\David Laptop\\Documents\\Doc1.xml");
XMLEncoder encoder = new XMLEncoder(os);
for( int x = 0; x < people.length;x++)
if (people[x] != null)
{
encoder.writeObject(people[x]);
}
}
encoder.close();
与此同时,您必须确保您的People
类符合基本必须为Serializable
的{{3}}约定,并且应提供公开的无参数构造函数。