Java数据的持久保存——写入XML文件
来源:互联网 发布:中国历年gdp增长率数据 编辑:程序博客网 时间:2024/06/08 20:03
开始
开始时,我们需要定义一个我们要初始化、保存和重新创建的类。让我们定义一个带有以下 4 个属性的类:
- 测试分数的整数数组,可当做一个经过索引的属性
- 只读 float 属性,表示平均分数
- String 属性,代表学生的姓名
- java.awt.Point 属性,代表学生在班里的座位
这个可变的属性类型集将演示编码器如何处理不同的数据类型。 清单 1 显示样本类定义。(它也在 net.zukowski.ibm 包中。请参阅 参考资料,下载本文中使用的代码。)那儿甚至有一个有用的 toString() 方法,我们可以使用这个方法直观地看到检索出的值是设置正确的。
回页首
保存状态
既然我们有了用于保存的类,我们可创建一个实例并使用 XMLEncoder 进行保存。这个类可以在 java.beans 包中被找到,它的工作原理与 ObjectOutputStream 相同,但不是 OutputStream 类层次结构的一部分。您可以将要保存到的输出流对象传入 OutputStream ,并调用其 writeObject() 方法将对象写入到流中。这很简单。
清单 2. 创建一个实例并将其保存为 XML
// Create
Sample sample = new Sample();
sample.setScores(new int[] {100, 90, 75});
sample.setName("Gore");
sample.setSeat(new Point(5, 3));
// Save
XMLEncoder encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Sample.xml")));
encoder.writeObject(sample);
encoder.close();
回页首
检查格式
当检查清单 3 所示的 XML 文件时,您会注意到如何读取格式是与输出在一起编码的,在本例中是与 v1.4 beta 中的 XMLDecoder 一起编码的。这种方法使得将来的发行版能够更改格式,这样如果使用的是比较旧的 XML 文件,新的解码器在生成 XML 文件时会知道使用的是哪种编码类型。从本质上来说,这个文件是一个正规 XML 文件,服从特定的 DTD(本文中没有引用到)。但是,解码器能够识别该文件。
清单 3. 经过编码的 XML 样本实例
<?xml version="1.0" encoding="UTF-8"?>
<java version="
<object class="net.zukowski.ibm.Sample">
<void property="name">
<string>Gore</string>
</void>
<void property="scores">
<array class="int" length="3">
<void index="0">
<int>100</int>
</void>
<void index="1">
<int>90</int>
</void>
<void index="2">
<int>75</int>
</void>
</array>
</void>
<void property="seat">
<object class="java.awt.Point">
<int>5</int>
<int>3</int>
</object>
</void>
</object>
</java>
这个特定的 XML 文件未显示如何嵌入用于复位 bean 属性的方法调用,如添加侦听器以及将组件添加到容器。
回页首
读回
读取原始图的对象图就如保存它一样容易,但这次我们使用 XMLDecoder 。解码器的工作原理与 ObjectInputStream 相同,使用它可将文件的 InputStream 传送到构造函数中,并使用 readObject() 方法读取对象。您仍然必须将结果强制转换为适当的类型。
清单 4. XML 的读回
// Read
XMLDecoder decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("Sample.xml")));
Sample sample2 = (Sample)decoder.readObject();
decoder.close();
回页首
完整的示例
从本质上来说,这个示例包括了将 JavaBean 组件状态编码进 XML 以及从 XML 中解码出来的全部内容。这个示例在后台进行的工作要比我们看到的多得多。但是,要使用类,您不必了解全部内容,就象进行序列化一样。如果您对自己生成 XML 文件感兴趣,您还必须阅读更多有关文件格式的内容(请参阅 参考资料)。
这里是一个创建实例,对其进行编码,然后对其进行解码的完整的测试示例。
清单 5. 完整的测试示例
import net.zukowski.ibm.Sample;
import java.io.*;
import java.beans.*;
import java.awt.Point;
public class SampleTest {
public static void main (String args[]) throws Exception {
Sample sample = new Sample();
sample.setScores(new int[] {100, 90, 75});
sample.setName("Gore");
sample.setSeat(new Point(5, 3));
XMLEncoder encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Sample.xml")));
encoder.writeObject(sample);
encoder.close();
System.out.println(sample);
XMLDecoder decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("Sample.xml")));
Sample sample2 = (Sample)decoder.readObject();
decoder.close();
System.out.println(sample2);
}
}
- Java数据的持久保存——写入XML文件
- 数据持久化基础知识——文件保存方案
- java将数据写入xml与读取xml文件数据
- DataSet里的数据写入XML文件
- java XML文件的保存
- java读取、写入保存、遍历ini文件配置数据
- Java中最简单的把数据写入xml文件的方法----jdom之xml操作
- JAVA写入XML文件
- 数据的持久化保存
- Java眼中的XML--文件写入
- Java眼中的XML ---文件写入
- Xml文件的读取与写入 java
- 把文件写入xml和更新xml的数据
- 十二.Android数据持久化方法之一——文件保存
- XML文件的写入
- Python持久存储--数据保存到文件
- 使用Json持久化保存数据,数据的写入和读出(以注册登录账号为例)_1
- XML基础知识——写入数据到XML文件(二)
- 如何使用XCDZIP35.OCX对文件压缩-已解决整理
- 伪指令.word
- 在Windows Visual C++ 6.0/7.0下编译带ssl的curl库
- 开博
- 皮带传动实验
- Java数据的持久保存——写入XML文件
- Hibernate级联操作学习之持久化临时对象
- eMule源代码解析
- 用DirectShow实现QQ的音视频聊天功能
- Spring+Ibatis集成开发实例!
- Android学习笔记 ( by quqi99 )
- 日历控件Calendar使用技巧--根据数据库数据控制日期背景显示颜色
- windows和linux的线程同步性能
- C#中静态变量的初始化