'Parse Properties Files'에 해당되는 글 1건

  1. 2010.02.19 Parse Properties Files
반응형
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.Properties;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.util.Properties;
import java.util.Enumeration;
import org.apache.xerces.parsers.*;

public class ParseNonXML extends DefaultHandler {

  public static void main(String args[]) throws SAXException {

    PropertyFileParser pfp = new PropertyFileParser();
    pfp.setContentHandler(new ParseNonXML());
    pfp.parse(buildProperties());
  }

  public static Properties buildProperties() {
    Properties props = new Properties();
    for (int i = 0; i < 10; i++)
      props.setProperty("key" + i, "value" + i);
    return props;
  }

  public void startDocument() {
    System.out.println("<keys>");
  }

  public void endDocument() {
    System.out.println("</keys>");
  }

  public void characters(char[] data, int start, int end) {
    String str = new String(data, start, end);
    System.out.print(str);
  }

  public void startElement(String uri, String qName, String lName, Attributes atts) {
    System.out.print("<" + lName + ">");
  }

  public void endElement(String uri, String qName, String lName) {
    System.out.println("</" + lName + ">");
  }
}

class PropertyFileParser extends SAXParser {

  private Properties props = null;

  private ContentHandler handler = null;

  public void parse(Properties props) throws SAXException {
    handler = getContentHandler();
    handler.startDocument();
    Enumeration e = props.propertyNames();
    while (e.hasMoreElements()) {
      String key = (String) e.nextElement();
      String val = (String) props.getProperty(key);
      handler.startElement("", key, key, new AttributesImpl());
      char[] chars = getChars(val);
      handler.characters(chars, 0, chars.length);
      handler.endElement("", key, key);
    }
    handler.endDocument();
  }

  private char[] getChars(String value) {
    char[] chars = new char[value.length()];
    value.getChars(0, value.length(), chars, 0);
    return chars;
  }

}
Posted by 1010