import java.io.File;import java.io.IOException;import java.lang.reflect.Field;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;import org.apache.log4j.Logger;import com.javaUtil.launch.reflect.ReflectByClassName;/** * function file to read ini config file */public class INI { private static Logger logger = Logger.getLogger(INI.class); private final ConcurrentHashMapparams = new ConcurrentHashMap (); public String FILENAME = ""; public INI() { } public INI(String filename, Class cls) { FILENAME = filename; doInit(filename, cls); } public INI(String commFileName,String relativePath, String fileName, Class objClass) { FILENAME = getFullFilename(relativePath, fileName, commFileName); doInit(FILENAME, objClass); } private void doInit(String filename,Class cls) { if (params != null) { params.clear(); } try { ConcurrentHashMap > concurrentHashMap = IniUtil.getAllProfileStrings(filename); Set keys = concurrentHashMap.keySet(); for (String key : keys) { Object obj = cls.newInstance(); ConcurrentHashMap valueMap = concurrentHashMap.get(key); Set innerkeys = valueMap.keySet(); for (String innerKey : innerkeys){ ReflectByClassName.setValue(obj, innerKey, valueMap.get(innerKey)); } params.put(key, obj); } } catch (IOException | InstantiationException | IllegalAccessException e) { logger.error(e); e.printStackTrace(); } } public ConcurrentHashMap getParams(){ return params; } public Object getParamObj(String key) { if (null == key || key == "") { return null; } return params.get(key); } public void saveParam(String fileName,String section,String variable, String value) { try { Object obj = params.get(section); if (null == obj) { logger.warn("[" + section + "] doesn't exists "); return; } ReflectByClassName.setValue(obj, variable, value); if (null == fileName || fileName == "") { if (this.FILENAME != null && !"".equals(this.FILENAME)) { IniUtil.setProfileString(this.FILENAME, section, variable, value); } } else { IniUtil.setProfileString(fileName, section, variable, value); } } catch (Exception e) { logger.error(e); e.printStackTrace(); } } public void saveParam(String filename, String section, Object obj) { try { if (null == section || "".equals(section) || null == params.get(section)) { logger.warn("[" + section + "] doesn't exists "); return; } if (null == filename || filename == "") { filename = this.FILENAME; } params.put(section, obj); Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields){ IniUtil.setProfileString(filename,section,field.getName(),(String) ReflectByClassName.getValue(obj,field.getName())); } } catch (SecurityException e) { logger.error(e); e.printStackTrace(); } catch (IOException e) { logger.error(e); e.printStackTrace(); } } public static String getFullFilename(String relativePath,String fileName,String commFileName) { String cFile = IniUtil.getFullFilename(relativePath, commFileName); if (new File(cFile).exists()) { try { ConcurrentHashMap > concurrentHashMap = IniUtil.getAllProfileStrings(cFile); if (concurrentHashMap != null && concurrentHashMap.size() > 0 && concurrentHashMap.get(fileName) != null) { String path = concurrentHashMap.get(fileName).get("path"); if (path != null && new File(path).exists()) { return path; } } } catch (IOException e) { e.printStackTrace(); } } return IniUtil.getFullFilename(relativePath, fileName); } }
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.CopyOnWriteArraySet;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.apache.log4j.Logger;/** * function: ini config file dealer, to read and set ini config file */public final class IniUtil { private static Logger logger = Logger.getLogger(IniUtil.class); /** * function:get profile * @param file ini config file path * @param section variable column name * @param var var variable name, matches the ini file key * @param defaultVal variable is null or empty,use defaultValue * @return */ public static String getProfileString(String file,String section,String varName,String defaultVal) throws IOException{ //check input param if (null == file || "".equals(file.trim()) || null == section || "".equals(section.trim()) || null == varName || "".equals(varName.trim())) { return defaultVal; } String strLine, key = ""; BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); boolean isInSection = false; try { while((strLine = bufferedReader.readLine()) != null) { strLine = strLine.trim(); //check line data, empty string or start with # is ignore to deal with if (!"".equals(strLine) && !strLine.startsWith("#")) { strLine = strLine.split("[;]")[0]; Pattern p = Pattern.compile("\\[\\s*.*\\s*\\]"); Matcher m = p.matcher((strLine)); if (m.matches()){ p = Pattern.compile("\\[\\s*" + section + "\\s*\\]"); m = p.matcher(strLine); if (m.matches()){ isInSection = true; } else { isInSection = false; } } if (isInSection == true){ strLine = strLine.trim(); String[] strArray = strLine.split("="); if (strArray.length == 1){ key = strArray[0].trim(); if (key.equalsIgnoreCase(varName)){ return ""; } } else if (strArray.length == 2){ key = strArray[0].trim(); if (key.equalsIgnoreCase(varName)){ return strLine.substring(strLine.indexOf("=") + 1).trim(); } } else if (strArray.length > 2){ key = strArray[0].trim(); if (key.equalsIgnoreCase(varName)){ return strLine.substring(strLine.indexOf("=") + 1).trim(); } } } } } } catch (Exception e) { logger.error(e); e.printStackTrace(); } finally { bufferedReader.close(); } return defaultVal; } /** * function:TODO * @param file * @param section */ public static ConcurrentHashMapgetProfileStrings(String file, String section) throws IOException{ if (null == file || "".equals(file.trim()) || null == section || "".equals(section.trim())) { return null; } ConcurrentHashMap results = new ConcurrentHashMap (); String strLine = ""; BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); boolean isInSection = false; boolean isBreak = false; try{ while ((strLine = bufferedReader.readLine()) != null){ strLine = strLine.trim(); if (!"".equals(strLine.trim()) && !strLine.startsWith("#")) { strLine = strLine.split("[;]")[0]; Pattern p = Pattern.compile("\\[\\s*.*\\s*\\]"); Matcher m = p.matcher((strLine)); if (m.matches()){ if (isBreak){ break; } p = Pattern.compile("\\[\\s*" + section + "\\s*\\]"); m = p.matcher(strLine); if (m.matches()){ isInSection = true; isBreak = true; } else{ isInSection = false; isBreak = false; } } if (isInSection == true){ strLine = strLine.trim(); String[] strArray = strLine.split("="); if (strArray.length == 1){ results.put(strArray[0].trim(), ""); } else if (strArray.length == 2){ results.put(strArray[0].trim(), strLine.substring(strLine.indexOf("=") + 1).trim()); } else if (strArray.length > 2){ results.put(strArray[0].trim(), strLine.substring(strLine.indexOf("=") + 1).trim()); } } } } } catch (Exception e){ logger.error(e); e.printStackTrace(); } finally { bufferedReader.close(); } return results; } public static ConcurrentHashMap > getAllProfileStrings(String file) throws IOException{ if (file == null || "".equals(file)){ return null; } ConcurrentHashMap > results = new ConcurrentHashMap >(); String section = "", strLine = ""; InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8"); BufferedReader bufferedReader = new BufferedReader(isr); try{ while ((strLine = bufferedReader.readLine()) != null){ strLine = strLine.trim(); if (!"".equals(strLine.trim()) && !strLine.startsWith("#")) { strLine = strLine.split("[;]")[0]; Pattern p = Pattern.compile("\\[\\s*.*\\s*\\]"); Matcher m = p.matcher((strLine)); if (m.matches()){ section = strLine.substring(1, strLine.length() - 1); ConcurrentHashMap temp = new ConcurrentHashMap (); results.put(section, temp); } else { strLine = strLine.trim(); if (strLine == null || "".equalsIgnoreCase(strLine)){ continue; } String[] strArray = strLine.split("="); if (strArray.length == 1){ results.get(section).put(strArray[0].trim(), ""); } else if (strArray.length == 2){ results.get(section).put(strArray[0].trim(),strLine.substring(strLine.indexOf("=") + 1).trim()); } else if (strArray.length > 2){ results.get(section).put(strArray[0].trim(),strLine.substring(strLine.indexOf("=") + 1).trim()); } } } } } catch (Exception e){ logger.error(e); e.printStackTrace(); } finally{ bufferedReader.close(); } return results; } public static Set getSections(String file) throws IOException{ if (file == null || "".equals(file.trim())){ return null; } Set results = new CopyOnWriteArraySet (); String strLine = ""; BufferedReader bufferedReader = new BufferedReader(new FileReader(file)); try{ while ((strLine = bufferedReader.readLine()) != null){ strLine = strLine.trim(); strLine = strLine.split("[;]")[0]; Pattern p = Pattern.compile("\\[\\s*.*\\s*\\]"); Matcher m = p.matcher((strLine)); if (m.matches()){ results.add(strLine.substring(1, strLine.length() - 1)); } } } finally { bufferedReader.close(); } return results; } public static boolean setProfileString(String file, String section, String variable, String value) throws IOException{ if (file == null || "".equals(file.trim()) || section == null || "".equals(section.trim()) || variable == null || "".equals(variable.trim())){ return false; } String fileContent, allLine, strLine, newLine, remarkStr; String getValue; BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8")); boolean isInSection = false; fileContent = ""; try { while ((allLine = bufferedReader.readLine()) != null){ allLine = allLine.trim(); if (allLine.split("[;]").length > 1) remarkStr = ";" + allLine.split(";")[1]; else remarkStr = ""; strLine = allLine.split(";")[0]; Pattern p = Pattern.compile("\\[\\s*.*\\s*\\]"); Matcher m = p.matcher((strLine)); if (m.matches()){ p = Pattern.compile("\\[\\s*" + section + "\\s*\\]"); m = p.matcher(strLine); if (m.matches()){ isInSection = true; } else{ isInSection = false; } } if (isInSection == true){ strLine = strLine.trim(); String[] strArray = strLine.split("="); getValue = strArray[0].trim(); if (getValue.equalsIgnoreCase(variable)){ newLine = getValue + "=" + value + remarkStr; fileContent += newLine + "\r\n"; while ((allLine = bufferedReader.readLine()) != null){ fileContent += allLine + "\r\n"; } bufferedReader.close(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8")); bufferedWriter.write(fileContent); bufferedWriter.flush(); bufferedWriter.close(); return true; } } fileContent += allLine + "\r\n"; } } catch (IOException e){ logger.error(e); e.printStackTrace(); } finally{ bufferedReader.close(); } return false; } public static String getFullFilename(String relativePath, String filename){ String filename1 = null; String filename2 = null; String filename3 = null; String filename5 = null; //get the classes path of the java file String classesPath = IniUtil.class.getResource("/").toString(); String webinfoPath = classesPath.substring(0, classesPath.length() - 9); String webRoot = classesPath.substring(0, classesPath.length() - 17); webinfoPath = webinfoPath.replaceAll("file:/", ""); webRoot = webRoot.replaceAll("file:/", ""); String os = System.getProperty("file.separator"); if (os.equals("/")){ webinfoPath = "/" + webinfoPath; webRoot = "/" + webRoot; } if (relativePath != null && !"".equals(relativePath)){ filename1 = webinfoPath + File.separator + relativePath + File.separator + filename; } else{ filename1 = webinfoPath + File.separator + filename; } if (relativePath != null && !"".equals(relativePath)){ filename2 = System.getProperty("user.dir") + File.separator + relativePath + File.separator + filename; } else{ filename2 = System.getProperty("user.dir") + File.separator + filename; } if (relativePath != null && !"".equals(relativePath)){ filename3 = webRoot + File.separator + relativePath + File.separator + filename; } else{ filename3 = webRoot + File.separator + filename; } if (relativePath != null && !"".equals(relativePath)){ filename5 = System.getProperty("user.dir") + File.separator + "WebContent" + File.separator + "WEB-INF" + File.separator + relativePath + File.separator + filename; } else{ filename5 = System.getProperty("user.dir") + File.separator + "WebContent" + File.separator + "WEB-INF" + File.separator + filename; } String filename4 = classesPath.replaceAll("file:/", "") + File.separator + filename; String realFilename = filename; logger.info("=====>" + filename); logger.info("=====>" + filename1); logger.info("=====>" + filename2); logger.info("=====>" + filename3); logger.info("=====>" + filename4); logger.info("=====>" + filename5); if (new File(filename3).exists()){ realFilename = filename3; } else if (new File(filename1).exists()){ realFilename = filename1; } else if (new File(filename2).exists()){ realFilename = filename2; } else if (new File(filename4).exists()){ realFilename = filename4; } else if (new File(filename5).exists()){ realFilename = filename5; } else{ realFilename = filename; } return realFilename; } public static void main(String[] args) { System.out.println(getWebRoot()); } public static String getWebRoot(){ String classesPath = IniUtil.class.getResource("/").toString(); String webRoot = classesPath.substring(0, classesPath.length() - 17); webRoot = webRoot.replaceFirst("file:", ""); if (webRoot.indexOf(":/") != -1){ webRoot = webRoot.substring(1); } return webRoot; } }
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;public class ReflectByClassName { /** * function: copy attributes to init dest Object * @param destObj * @param srcObj */ public static void copyProperties(Object destObj,Object srcObj) { Class destCls = destObj.getClass(); Class srcCls = srcObj.getClass(); Field[] fileds = srcCls.getDeclaredFields(); try { for (Field f : fileds) { String fieldName = f.getName(); String fGetName = "get" + toFirstLetterUpperCase(fieldName); String fSetName = "set" + toFirstLetterUpperCase(fieldName); Object value = srcCls.getMethod(fGetName).invoke(srcObj) ; destCls.getMethod(fSetName,value.getClass()).invoke(destObj, value); } } catch (Exception e) { e.printStackTrace(); } } /** * function: uppperCase the first letter of the filed * @param str */ public static String toFirstLetterUpperCase(String str){ if (str == null || str.length() < 2){ return str; } String firstLetter = str.substring(0, 1).toUpperCase(); return firstLetter + str.substring(1, str.length()); } /** * function: assign value to the filed of the target object * @param obj * @param filed * @param value */ public static void setValue(Object obj, String filed, String value){ try { Class cls = obj.getClass(); String setMethodName = "set" + toFirstLetterUpperCase(filed); cls.getMethod(setMethodName, value.getClass()).invoke(obj, value); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } } /** * * function:fetch object value of the field * @param obj * @param filed * @return */ public static Object getValue(Object obj, String filed){ try{ Class cls = obj.getClass(); String getMethodName = "get" + toFirstLetterUpperCase(filed); return cls.getMethod(getMethodName).invoke(obj); } catch (Exception e){ e.printStackTrace(); } return null; }}