XMLProperties与适配器模式举例:
//-----
import java.io.FileReader;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.helpers.DefaultHandler;
public class MySAXApp extends DefaultHandler {
public MySAXApp() {
super();
}
public void startDocument(){
System.out.println("start document()!");
}
public void character(char[] ch, int start, int end){
System.out.println("character()");
for(int i = start; i < start + end; i ++){
System.out.println(ch[i]);
}
}
public void endDocument(){
System.out.println("end document()!");
}
public static void main(String args[]) throws Exception {
XMLReader xr = XMLReaderFactory.createXMLReader();
MySAXApp handler = new MySAXApp();
xr.setContentHandler(handler);
FileReader fr = new FileReader("/home/briup/work/xml_jd0810/src/day01/student.xml");
xr.parse(new InputSource(fr));
}
}
//适配器类XMLProperties类
import org.xml.sax.DocumentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.Locator;
import org.xml.sax.AttributeList;
import org.xml.sax.Parser;
import org.xml.sax.InputSource;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.File;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Enumeration;
//此类是一个Properties数据和XML数据之间的转换器
public class XMLProperties extends Properties{
XMLParser p = null;
//从一个输入流读入XML
public synchronized void load(InputStream in) throws IOException{
try{
p = new XMLParser(in, this);
}catch(SAXException e){
throw new IOException(e.getMessage());
}
}
//将XML文件读入
public synchronized void load(File file) throws SAXException,IOException{
InputStream in = new BufferedInputStream(new FileInputStream(file));
XMLParser p = null;
try{
p = new XMLParser(in, this);
}catch(SAXException e){
System.out.println(e);
throw e;
}
}
//调用store(OutputStream out, String header)方法
public synchronized void save(OutputStream out, String header){
try{
store(out, header);
}catch(IOException ex){
ex.printStackTrace();
}
}
//将此property列表写入到输出流里
public synchronized void store(OutputStream out, String header) throws IOException{
PrintWriter wout = new PrintWriter(out);
wout.println("<?xml version="1.0"?>");
if(header != null){
wout.println("<!-- " + header + "-->");
}
wout.print("<properties>");
for(Enumeration e = keys(); e.hasMoreElements();){
String key = (String)e.nextElement();
String value = (String)get(key);
wout.print("\n<key name = \>"" + key + "\">");
wout.print(encode(value));
wout.print("</key>");
}
wont.print("\n</properties>");
wout.flush();
}
public StringBuffer encode(String string){
int len = string.length();
StringBuffer buffer = new StringBuffer(len);
char c;
for(int i = 0; i < len; i ++){
switch(c == string.charAt(i)){
case '&':
buffer.append("&");
break;
case '><':
buffer.append("<");
break;
case '""':
buffer.append(">");
break;
default:
buffer.append(c);
}
}
return buffer;
}
//创建一个没有默认内容的空的property
public XMLProerties(){
super();
}
//创建一个空的property,并以传入的property为默认值
public XMLProperties(Properties defaults){
super(defaults);
}
}
分享到:
相关推荐
7. **适配器模式**:类似于魏蜀吴各国之间的外交使节,他们使得不同国家的礼节得以相互适应。在Java中,适配器模式可以将两个不兼容的接口转换为可以协同工作的接口。 8. **桥接模式**:可以类比为曹操与郭嘉的组合...
**第8章 工厂方法模式** - **8.1 女娲造人的故事** 通过神话故事引入工厂方法模式的概念。 - **8.2 工厂方法模式的定义** 定义工厂方法模式的基本结构和作用。 - **8.3 工厂方法模式的应用** 展示工厂方法...
设计模式举例 这部分内容将通过具体的例子来介绍设计模式的应用场景,帮助读者理解不同设计模式如何解决特定的问题。 ### 3. 先有鸡还是先有蛋? 这是一个引人思考的问题,旨在探讨软件设计中的某些基本哲学问题...
适配器模式是一种结构型设计模式,它允许两个不兼容的接口之间进行通信。在实际项目中,我们可能会遇到需要整合第三方库或者旧有系统的情况,适配器模式就能派上用场。它通过创建一个适配器对象,将原有接口转换成...
结构模式 设计模式之 Adapter(适配器) 使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java中提到过. 设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 ...
适配器模式可以使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 7、装饰器模式(Decorator) 装饰器模式动态地给一个对象添加一些额外的职责。装饰模式与继承关系的目的都是要扩展对象的功能,但装饰...
6. **适配器模式**:使两个不兼容的接口能够协同工作。例如,你可能有一个旧的音频播放设备,需要通过一个适配器来让它与新的音乐播放软件兼容。 7. **策略模式**:定义一系列算法,并将每一个算法封装起来,使它们...
无字库技术 73 7.5.1 小字库技术 74 7.5.2 无字库技术 80 7.6 中文特效 83 7.6.1 多字体显示 83 7.6.2 文字格式显示 83 7.7 本章小结 84 第8章 图形文件 85 8.1 bmp文件调用 85 8.1.1 bmp文件结构 86 8.1.2 256色...
\第8章 文件处理 219 \8.1 读写文本文件 219 \8.2 操作二进制文件 220 \8.3 临时文件 222 \8.4 目录操作和文件管理 222 \8.4.1 目录操作 222 \8.4.2 文件管理 224 \8.5 监视文件系统变化 225 \8.6 文件引擎 ...
\ 第8章 文件处理 蔡志明介绍了Qt的文件处理,包括基于流的文本文件和二进制文件处理,文件信息和目录操作,目录以及文件的变化监控,文件引擎的编写。 219 \ 第9章 网络 李立夏介绍了Qt的网络处理,包括编写常见的...
当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...
第8章 深入理解类 363 8.1 类析构函数 363 8.1.1 析构函数的概念 363 8.1.2 默认的析构函数 364 8.1.3 析构函数与动态内存分配 366 8.2 实现复制构造函数 369 8.3 在变量之间共享内存 370 8.3.1 定义联合 371...
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送...