Dans les projets, nous écrivons souvent les fichiers de configuration au format XML et donnons le chemin du fichier XML dans le fichier de propriétés.
Pour lire les fichiers de propriétés, la classe d'outils propertyUtil est donnée ici.
Avant cela, veuillez noter : une fois que Java Properties a chargé le fichier de propriétés, il ne peut pas garantir que l'ordre de sortie est cohérent avec le fichier, car les propriétés sont héritées de Hashtable et la clé/valeur est directement stockée dans Hashtable. , et Hashtable ne garantit pas l'ordre d'entrée et de sortie.
Solution : héritez de la classe java.util.Properties et utilisez LinkedHashSet pour enregistrer toutes ses clés.
La classe OrderedProperties est la suivante
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; } }
La méthode principale qui lit les propriétés du fichier de configuration et analyse le XML :
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); } }
La classe propertyUtil est la suivante
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 }
classe d'analyse 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<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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!