Heim  >  Artikel  >  Java  >  Die Hauptmethode, die die Eigenschaften der Konfigurationsdatei liest und XML analysiert

Die Hauptmethode, die die Eigenschaften der Konfigurationsdatei liest und XML analysiert

零下一度
零下一度Original
2017-06-25 10:33:232482Durchsuche

In Projekten schreiben wir häufig Konfigurationsdateien im XML-Format und geben den XML-Dateipfad in der Eigenschaftendatei an.

Zum Lesen von Eigenschaftendateien wird hier die Toolklasse propertyUtil angegeben.

Bitte beachten Sie vorher: Nachdem Java Properties die Eigenschaftendatei geladen hat, kann nicht garantiert werden, dass die Ausgabereihenfolge mit der Datei übereinstimmt, da Eigenschaften von Hashtable geerbt werden und Schlüssel/Wert direkt in Hashtable gespeichert werden. , und Hashtable garantiert nicht die Reihenfolge des Ein- und Ausstiegs.

Lösung: Erben Sie die Klasse java.util.Properties und verwenden Sie LinkedHashSet, um alle ihre Schlüssel zu speichern.

Die OrderedProperties-Klasse lautet wie folgt

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;  
    }  

}

Die Hauptmethode, die Konfigurationsdateieigenschaften liest und XML analysiert:

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);
        
        
    }
}

Die propertyUtil-Klasse lautet wie folgt

  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 }
Code anzeigen

XML-Parsing-Klasse

  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 }
Code anzeigen

 

Das obige ist der detaillierte Inhalt vonDie Hauptmethode, die die Eigenschaften der Konfigurationsdatei liest und XML analysiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn