本文共 4722 字,大约阅读时间需要 15 分钟。
前言:在编程中,虽然说在程序执行完毕之后销毁对象是合理并且必须的。但是,我们不可避免的,有时候我们希望将对象持久化,以便于我们下次可以直接恢复他们,而不需要重新去给对象赋值等。于是便有了对象序列化的问题。这种对象的序列化让我们可以在不同的平台上进行对象数据的正确的传输,但是这种序列化也是有局限的,这仅仅是针对于java的解决方案,必须同是java程序才能进行解析。为了追求更加通用的方案,我们可以将数据转化为XML格式,以追求更为通用的解决方案。也就是说,XML是跨平台,跨语言的!
可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
public class Student { private String firstName; private String lastName; public Student() { } public Student(String firstName, String lastName) { super(); this.firstName = firstName; this.lastName = lastName; } // 将Student对象转换为位于root下的一个XML子元素 public Element getXML() { Element student = new Element("Student"); Element first = new Element("first"); first.appendChild(firstName); student.appendChild(first); Element last = new Element("last"); last.appendChild(lastName); student.appendChild(last); return student; }}
public class Main { public static void main(String args[]) { List将结果输出到控制台,我们发现,toXML()的确的并没有什么格式,仅仅是,如下:(部分截图)students = new ArrayList (); students.add(new Student("Dr.Bunsen", "Honeydew")); students.add(new Student("Gonzo", "The Great")); students.add(new Student("Phillip J.", "Fry")); students.add(new Student("明", "王")); students.add(new Student("红", "林")); // 将列表中的学生数据一一放入存放至根目录root下 Element root = new Element("Students"); for (Student student : students) { root.appendChild(student.getXML()); } // 构造XML的Document对象 Document document = new Document(root); System.out.println(document.toXML()); }}
/*** 将document进行XML的“格式化”* * @param document需要格式化的Document对象* @throws IOException*/public static void format(Document document) throws IOException { Serializer serializer = new Serializer(System.out, "GBK"); // 设置行缩进 serializer.setIndent(4); // 设置行最大长度 serializer.setMaxLength(60); serializer.write(document);}
输出如下,可以看到,的确是比上面的输出更加可读了。 format(new BufferedOutputStream( new FileOutputStream("Students.xml")), document);
可以在相应目录中找到XML文件,用记事本打开查看如下,检验正确。 /*** 将指定XML文件进行数据恢复* * @param fileName* @throws Exception*/private static List recovery(String fileName) throws Exception { List students = new ArrayList (); Document document = new Builder().build(new File(fileName)); Elements elements = document.getRootElement().getChildElements(); for (int i = 0; i < elements.size(); i++) { Element element = elements.get(i); Student student = new Student(element.getFirstChildElement("first") .getValue(), element.getFirstChildElement("last") .getValue()); students.add(student); } return students;}
输出如下,读出成功。 java.io.File
object to the build
method instead of a URL. Document document = new Builder().build(fileName);便会出现这样的异常: