• 技术文章 >Java >java教程

    Java开发中读取XML与properties配置文件的方法

    高洛峰高洛峰2017-01-12 10:27:03原创1081

    相关阅读:

    使用Ajax进行文件与其他参数的上传功能(java开发)

    1. XML文件:

    什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

    2.XML文件的优点:

    1)XML文档内容和结构完全分离。
    2)互操作性强。
    3)规范统一。
    4)支持多种编码。
    5)可扩展性强。

    3.如何解析XML文档:

    XML在不同的语言中解析XML文档都是一样的,只不过实现的语法不一样,基本的解析方式有两种,一种是SAX方式,是按照XML文件的顺序一步一步解析。另外一种的解析方式DOM方式,而DOM方式解析的关键就是节点。另外还有DOM4J、JDOM等方式。本文介绍的是DOM、DOM4J方式与封装成一个工具类的方式来读取XML文档。

    4.XML文档:

    scores.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE students [
     <!ELEMENT students (student+)>
     <!ELEMENT student (name,course,score)>
     <!ATTLIST student id CDATA #REQUIRED>
     <!ELEMENT name (#PCDATA)>
     <!ELEMENT course (#PCDATA)>
     <!ELEMENT score (#PCDATA)>
    ]>
    <students>
     <student id="11">
      <name>张三</name>
      <course>JavaSE</course>
      <score>100</score>
     </student>
     <student id="22"> 
      <name>李四</name>
      <course>Oracle</course>
      <score>98</score>
     </student>
    </students>

    5.DOM方式解析XML

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
      //1.创建DOM解析器工厂
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      //2.由DOM解析器工厂创建DOM解析器
      DocumentBuilder db = dbf.newDocumentBuilder();
      //3.由DOM解析器解析文档,生成DOM树
      Document doc = db.parse("scores.xml");
      //4.解析DOM树,获取文档内容(元素 属性 文本)
      //4.1获取根元素scores
      NodeList scoresList = doc.getChildNodes();
      Node scoresNode = scoresList.item(1);
      System.out.println(scoresList.getLength());
      //4.2获取scores中所有的子元素student
      NodeList studentList = scoresNode.getChildNodes();
      System.out.println(studentList.getLength());
      //4.3对每个student进行处理
      for(int i=0;i<studentList.getLength();i++){
       Node stuNode = studentList.item(i);
       //System.out.println(stuNode.getNodeType());
       //输出元素的属性 id
       if(stuNode.getNodeType()==Node.ELEMENT_NODE){
        Element elem =(Element)stuNode;
        String id= elem.getAttribute("id");
        System.out.println("id------>"+id);
       }
       //输出元素的子元素 name course score
       NodeList ncsList = stuNode.getChildNodes();
       //System.out.println(ncsList.getLength() );
       for(int j=0;j<ncsList.getLength();j++){
        Node ncs = ncsList.item(j);
        if(ncs.getNodeType() == Node.ELEMENT_NODE){
          String name = ncs.getNodeName();
          //String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild
          String value = ncs.getTextContent();
          System.out.println(name+"----->"+value);
        }
       }
       System.out.println();
      }
     }

    6.DOM4J方式解析XML文档:

    public static void main(String[] args) throws DocumentException {
     //使用dom4j解析scores2.xml,生成dom树
     SAXReader reader = new SAXReader();
     Document doc = reader.read(new File("scores.xml")); 
     //得到根节点:students
     Element root = doc.getRootElement(); 
     //得到students的所有子节点:student
     Iterator<Element> it = root.elementIterator();
     //处理每个student
     while(it.hasNext()){
      //得到每个学生
      Element stuElem =it.next();
      //System.out.println(stuElem);
      //输出学生的属性:id
      List<Attribute> attrList = stuElem.attributes();
      for(Attribute attr :attrList){
       String name = attr.getName();
       String value = attr.getValue();
       System.out.println(name+"----->"+value);
      }
      //输出学生的子元素:name,course,score
      Iterator <Element>it2 = stuElem.elementIterator();
      while(it2.hasNext()){
       Element elem = it2.next();
       String name = elem.getName();
       String text = elem.getText();
       System.out.println(name+"----->"+text);
      }
      System.out.println();
     }
    }

    当然,无论我们是使用那种方式解析XML的,都需要导入jar包(千万不要忘记)。

    7.我自己的方式:

    在实际开发的工程中,我们要善于使用工具类,将我们反复使用的功能封装成一个工具类,所以,下面的方式就是我在开发的过程中使用的方式.

    7.1什么是properties文件:

    7.1.1 从结构上讲:

    .xml文件主要是树形文件。
    .properties文件主要是以key-value键值对的形式存在

    7.1.2 从灵活的角度来说:

    .xml文件要比.properties文件的灵活读更高一些。

    7.1.3 从便捷的角度来说:

    .properties文件比.xml文件配置更加简单。

    7.1.4 从应用程度上来说:

    .properties文件比较适合于小型简单的项目,因为.xml更加灵活。

    7.2自己的properties文档:

    在我自己的项目中创建了一个path.properties文件,里面用来存放我即将使用的路径,以名字=值的方式存放。例如:

    realPath = D:/file/

    7.3 解析自己的.properties文件:

    public class PropertiesUtil {
     private static PropertiesUtil manager = null;
     private static Object managerLock = new Object();
     private Object propertiesLock = new Object();
     private static String DATABASE_CONFIG_FILE = "/path.properties";
     private Properties properties = null;
     public static PropertiesUtil getInstance() {
      if (manager == null) {
       synchronized (managerLock) {
        if (manager == null) {
         manager = new PropertiesUtil();
        }
       }
      }
      return manager;
     }
     private PropertiesUtil() {
     }
     public static String getProperty(String name) {
      return getInstance()._getProperty(name);
     }
     private String _getProperty(String name) {
      initProperty();
      String property = properties.getProperty(name);
      if (property == null) {
       return "";
      } else {
       return property.trim();
      }
     }
     public static Enumeration<?> propertyNames() {
      return getInstance()._propertyNames();
     }
     private Enumeration<?> _propertyNames() {
      initProperty();
      return properties.propertyNames();
     }
     private void initProperty() {
      if (properties == null) {
       synchronized (propertiesLock) {
        if (properties == null) {
         loadProperties();
        }
       }
      }
     }
     private void loadProperties() {
      properties = new Properties();
      InputStream in = null;
      try {
       in = getClass().getResourceAsStream(DATABASE_CONFIG_FILE);
       properties.load(in);
      } catch (Exception e) {
       System.err
         .println("Error reading conf properties in PropertiesUtil.loadProps() "
           + e);
       e.printStackTrace();
      } finally {
       try {
        in.close();
       } catch (Exception e) {
       }
      }
     }
     /**
      * 提供配置文件路径
      *
      * @param filePath
      * @return
      */
     public Properties loadProperties(String filePath) {
      Properties properties = new Properties();
      InputStream in = null;
      try {
       in = getClass().getResourceAsStream(filePath);
       properties.load(in);
      } catch (Exception e) {
       System.err
         .println("Error reading conf properties in PropertiesUtil.loadProperties() "
           + e);
       e.printStackTrace();
      } finally {
       try {
        in.close();
       } catch (Exception e) {
       }
      }
      return properties;
     }
    }

    当我们使用之前,我们只需要给 DATABASE_CONFIG_FILE 属性附上值,就是我们.properties文件的名称,当使用的时候,我们就可以直接使用类名. getProperty(“realPath”);的方式就可以获取到在.properties文件中的key为realPath的内容。

    以上所述是小编给大家介绍的Java开发中读取XML与properties配置文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

    更多Java开发中读取XML与properties配置文件的方法相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:使用Ajax进行文件与其他参数的上传功能(java开发) 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一起来分析java设计模式之单例• Java数据结构之单链表与OJ题• 一文搞懂Java线程池实现原理• Java总结分享之反射、枚举、Lambda表达式• 详细介绍Java正则表达式之单字符匹配和预定义字符
    1/1

    PHP中文网