在项目中,我们经常将配置文件写为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<Object> keys = new LinkedHashSet<Object>();  
       public Enumeration<Object> keys() {  return Collections.<Object> enumeration(keys);  
    }  
   public Object put(Object key, Object value) {  
        keys.add(key);  return super.put(key, value);  
    }  
   public Set<Object> keySet() {  return keys;  
    }  
   public Set<String> stringPropertyNames() {  
        Set<String> set = new LinkedHashSet<String>();  
   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类如下

读取配置文件properties并解析xml的main方法-LMLPHP读取配置文件properties并解析xml的main方法-LMLPHP
  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解析类

读取配置文件properties并解析xml的main方法-LMLPHP读取配置文件properties并解析xml的main方法-LMLPHP
  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<String, Map<String, String>> workAttributes = new HashMap<String, Map<String, String>>(); 22      23     private Document document = null; 24      25     private Element rootElement = null; 26      27     /** 28      * 获取所有业务 29      * @return 30      */ 31     public Map<String, Map<String, String>> getWorkAttributes() { 32         return workAttributes; 33     } 34     /** 35      * 根据world获取对应业务 36      * @return 37      */ 38     public Map<String, String> 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<String, String> getWorkAttributesByWorkName(String workName) { 72          73         for (String str : workAttributes.keySet()) { 74             Map<String, String> 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<String, String> 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<String, String> workAttrMap = new HashMap<String, String>();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

  

以上就是读取配置文件properties并解析xml的main方法的详细内容,更多请关注Work网其它相关文章!

09-19 12:50