博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解析XML文件
阅读量:4654 次
发布时间:2019-06-09

本文共 9591 字,大约阅读时间需要 31 分钟。

在项目中,我们经常将配置文件写为xml格式,并在properties文件里,给出xml文件路径。

对于properties文件读取,这里给出propertyUtil工具类。

  在这之前,请注意:Java 的 Properties 加载属性文件后是无法保证输出的顺序与文件中一致的,因为 Properties 是继承自 Hashtable 的, key/value 都是直接存在 Hashtable 中的,而 Hashtable 是不保证进出顺序的。

  解决办法:继承java.util.Properties类,用LinkedHashSet 来保存它的所有 key。

OrderedProperties类如下

package com.test;import java.util.Collections;import java.util.Enumeration;import java.util.LinkedHashSet;import java.util.Properties;import java.util.Set;public class OrderedProperties extends Properties{    private static final long serialVersionUID = 1L;        private final LinkedHashSet keys = new LinkedHashSet();             public Enumeration keys() {          return Collections. enumeration(keys);      }         public Object put(Object key, Object value) {          keys.add(key);          return super.put(key, value);      }         public Set keySet() {          return keys;      }         public Set
stringPropertyNames() { Set
set = new LinkedHashSet
(); for (Object key : this.keys) { set.add((String) key); } return set; } }

读取配置文件properties并解析xml的main方法:

package com.test;public class T {    public static void main(String[] args) {        // 加载properties文件        propertityUtil pu = propertityUtil.getInstance("project-config.properties");        // 得到业务配置文件的路径        String WorkConfigureFile = pu.getProperty("WorkConfigureFile");        // 解析该xml文件        ConfigureFileFw configureFileFw = new ConfigureFileFw();        configureFileFw.parseConfigXmlFile(WorkConfigureFile);                    }}

propertityUtil类如下

1 package com.test;  2   3 import java.io.FileInputStream;  4 import java.io.FileNotFoundException;  5 import java.io.FileOutputStream;  6 import java.io.IOException;  7 import java.io.OutputStream;  8   9 public class propertityUtil { 10  11     /** 12      * prop对像 13      */ 14     private OrderedProperties prop = null; 15  16     /** 17      * 配置文件位置,默认为***-config.properties 18      */ 19     private String CONFIGPATH = "project-config.properties"; 20  21     /** 22      * 构造函数 23      */ 24     public propertityUtil() { 25         init(); 26     } 27  28     /** 29      * 构造函数 30      *  31      * @param prop 32      *            prop对像 33      */ 34     public propertityUtil(OrderedProperties prop) { 35         this.prop = prop; 36     } 37  38     /** 39      * 构造函数 40      *  41      * @param conf 42      */ 43     public propertityUtil(String conf) { 44         this.CONFIGPATH = conf; 45         init(CONFIGPATH); 46     } 47  48     /** 49      * 取得属性 50      *  51      * @return 52      */ 53     public OrderedProperties getProp() { 54         return prop; 55     } 56  57     /** 58      * 设置属性 59      *  60      * @param prop 61      */ 62     public void setProp(OrderedProperties prop) { 63         this.prop = prop; 64     } 65  66     /** 67      * 实例 68      *  69      * @param configpath 70      * @return 71      */ 72     public static propertityUtil getInstance(String configpath) { 73         return new propertityUtil(configpath); 74     } 75  76     /** 77      * 读取属性文件 78      *  79      * @param configpath 80      */ 81     private void init(String configpath) { 82         this.CONFIGPATH = configpath; 83         init(); 84     } 85  86     /** 87      * 初始化prop,从文件中读取 88      */ 89     private void init() { 90         if (this.CONFIGPATH == null || this.CONFIGPATH.length() == 0) { 91             System.out.println("No configFile"); 92         } else { 93  94             String srcDir = System.getProperty("user.dir"); 95             srcDir = srcDir + "/resources/properties/" + this.CONFIGPATH; 96             prop = new OrderedProperties(); 97             FileInputStream fin = null; 98             try { 99                 fin = new FileInputStream(srcDir);100                 prop.load(fin);101             } catch (FileNotFoundException e2) {102                 e2.printStackTrace();103             } catch (IOException e2) {104                 e2.printStackTrace();105             }106 107             // InputStream is = getClass().getResourceAsStream(this.CONFIGPATH);108             // prop = new Properties();109             // try {110             // prop.load(is);111             // } catch (Exception e) {112             // e.printStackTrace();113             // }114         }115     }116 117     /**118      * 取得属性值类119      * 120      * @param propName121      * @return122      */123     public String getProperty(String propName) {124         return getProperty(propName, "");125     }126 127     /**128      * 取得属性值类129      * 130      * @param propName131      * @return132      */133     public String getProperty(String propName, String defValue) {134         if (prop == null)135             init();136         String s = defValue;137         try {138             s = prop.getProperty(propName);139             if (s == null) {140                 s = defValue;141             } else {142                 s = s.trim();143             }144         } catch (Exception e) {145             e.printStackTrace();146         }147         return s;148     }149 150     /**151      * 设置属性152      * 153      * @param propName154      * @param value155      */156     public void setProperty(String propName, String value) {157         if (prop == null)158             init();159         try {160             prop.setProperty(propName, value);161             storeProperty();162         } catch (Exception e) {163             e.printStackTrace();164         }165     }166 167     /**168      * 保存属性文件169      */170     private void storeProperty() {171         try {172             String path = prop.getProperty("path");173             OutputStream out = new FileOutputStream(path);174             prop.store(out, " -- sl Soft Config File -- ");175             out.close();176         } catch (Exception ioe) {177             ioe.printStackTrace();178         }179     }180 }
View Code

xml解析类

1 package com.test;  2   3 import java.io.File;  4 import java.util.HashMap;  5 import java.util.List;  6 import java.util.Map;  7 import org.dom4j.Document;  8 import org.dom4j.Element;  9 import org.dom4j.io.SAXReader; 10  11 /** 12  * 业务方法配置管理类 13  * @author  14  * 15  */ 16 public class ConfigureFileFw { 17      18     /** 19      * 业务方法配置Map 20      */ 21     private static Map
> workAttributes = new HashMap
>(); 22 23 private Document document = null; 24 25 private Element rootElement = null; 26 27 /** 28 * 获取所有业务 29 * @return 30 */ 31 public Map
> getWorkAttributes() { 32 return workAttributes; 33 } 34 /** 35 * 根据world获取对应业务 36 * @return 37 */ 38 public Map
getWorkAttributesByWorkId(String workId) { 39 return workAttributes.get(workId); 40 } 41 42 /** 43 * 判断是否包含该业务 44 * @param workId 45 * @return 46 */ 47 public String hasWorkId(String workId) { 48 //Modified by wxq 2016/12/29 49 //return workAttributes.containsKey(workId); 50 String temp = ""; 51 for(String configWorkId:workAttributes.keySet()){ 52 if (configWorkId.contains(".*")){ 53 temp = configWorkId.substring(0,configWorkId.indexOf(".")); 54 } 55 else{ 56 temp = configWorkId; 57 } 58 if(workId.contains(temp)){ 59 return configWorkId; 60 } 61 } 62 return ""; 63 //Ended by wxq 2016/12/29 64 65 } 66 /** 67 * 根据业务名称获取业务 68 * @param workName 69 * @return 70 */ 71 public Map
getWorkAttributesByWorkName(String workName) { 72 73 for (String str : workAttributes.keySet()) { 74 Map
temp = workAttributes.get(str); 75 if (temp.get("name").equals(workName)) { 76 return temp; 77 } 78 } 79 return null; 80 } 81 //加入业务方法 82 private void addToWorkAttributes(String workId, Map
attrMap) { 83 workAttributes.put(workId, attrMap); 84 } 85 /** 86 * 根据传入的配置文件,初始化所有业务 87 * @param fileName 88 */ 89 public void parseConfigXmlFile(String fileName) { 90 try { 91 File f = new File(fileName); 92 SAXReader reader = new SAXReader(); 93 Document doc = reader.read(f); 94 rootElement = doc.getRootElement(); 95 if (!rootElement.equals(null)) { 96 Element works = (Element)rootElement.element("works"); 97 List
workList = works.elements(); 98 for (int i = 0; i < workList.size(); i++) { 99 Element work = (Element) workList.get(i);100 String workID = work.elementText("id");101 String workName = work.elementText("name");102 String workDescription = work.elementText("description");103 String workMethod = work.elementText("method");104 String dll = work.elementText("dll");105 String class1 = work.elementText("class");106 String workSend = work.elementText("send");107 String workReceive = work.elementText("receive");108 109 Map
workAttrMap = new HashMap
();110 workAttrMap.put("id", workID);111 workAttrMap.put("name", workName);112 workAttrMap.put("description", workDescription);113 workAttrMap.put("method", workMethod);114 workAttrMap.put("dll", dll);115 workAttrMap.put("class", class1);116 workAttrMap.put("send", workSend);117 workAttrMap.put("receive", workReceive);118 workAttributes.put(workID, workAttrMap);119 }120 }121 122 } catch (Exception e) {123 System.out.println("exception:" + e.getMessage());124 }125 }126 127 }
View Code

 

 

  

转载于:https://www.cnblogs.com/x-jingxin/p/6952129.html

你可能感兴趣的文章
sublime text 3 搭建python ide
查看>>
python爬虫工具
查看>>
java应用CPU占用100%内存泄漏分析总结(转载)
查看>>
我收藏的技术知识图(每张都是大图)
查看>>
2016 - 1 - 3 国旗选择demo
查看>>
百度地图demo
查看>>
面向对象
查看>>
浅析HashSet 与 HashMap
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②...
查看>>
空间复杂度
查看>>
jQuery学习-访问设置元素内容
查看>>
scala下划线的作用
查看>>
20169205 2016-2017-2 实验三 缓冲区溢出漏洞实验
查看>>
spring开发的总结
查看>>
ExtJS学习之路第五步:认识最常见组件Panel
查看>>
javascript的设计模式(三)———— 原型模式
查看>>
NGUI用UIGrid加载Item会有部分空出来的解决办法
查看>>
hdu 5365 Run
查看>>
绝对兼容的,简单易用的,滚动翻看图片功能!
查看>>
JAVA-初步认识-第三章-语句-if格式3
查看>>