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