读书人

Java怎么更新properties的多个值

发布时间: 2012-10-21 09:00:07 作者: rapoo

Java如何更新properties的多个值
这个例子用使用了propertie的store方法, 他的优点是简单, 不用自己实现IO,但缺点是回丢失注释和原文件的顺序.如果希望保证顺序,请参考 [转]一个保证store内容顺序不变的properties实现http://ygtq0521.iteye.com/blog/1278081

import java.io.*;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.Properties;/** * Created by IntelliJ IDEA. * User: Michael * Date: 10/31/11 * Time: 2:23 PM * To change this template use File | Settings | File Templates. */public class UpdateProperties {    private String pathSeparator = getPathSeparator();    public static void main(String[] args){        try{            String str1 = "/root/yangxm/sf/DSEngine/work/classpath_3.1.3.tra";            String str2 = "/root/yangxm/sf/DSEngine/work/sandbox-1304059787-0/bin";            String str3 = "/root/yangxm/sf/DSEngine/work/sandbox-1304059787-0/lib";             File traFile = new File(str1);            if(!traFile.exists()){                System.out.println(" tra file not found in dir ...");            }else{                new UpdateProperties().runMain(str1);            }        }catch (IOException e){            System.out.println(e);            // replace logger        } catch (Exception e) {            e.printStackTrace();        }    }    public  void runMain(String str1, String str2, String str3) throws Exception{        Properties prop = getTraFile(str1);        String[] targetVars = {           "env1.PATH",           "env2.LD_LIBRARY_PATH",            "env3.SHLIB_PATH",            "env4.LIBPATH"};        Map env = getTraFileValue(prop, targetVars);        Map newEnv = prepareNewEnv(env, str2, str3);        Properties trafile = updateTraFileValue(prop, newEnv);        store(trafile, str1, null);       }    public Properties getTraFile(String properties) throws Exception{          FileInputStream fis = new FileInputStream(new File(properties));          Properties nodeTra = new Properties();          nodeTra.load(fis);          return nodeTra;    }     public String getTraFileValue(Properties prop, String key){            return prop.getProperty(key);     }     public Map<String, String> getTraFileValue(Properties prop, String[] keys){            HashMap<String, String> env = new HashMap<String, String>();            for(String key: keys){                env.put(key, getTraFileValue(prop, key));            }            return env;     }       public boolean isUsingJRE64(Map<String, String> env){            boolean flag = false;            if(env.get("tibco.env.PATH").contains("tibcojre64")) {                flag = true;            }                return flag;     }     public Map<String, String> prepareNewEnv(Map<String, String> env, String binPath, String libPath){            Map<String, String> newEnv = new HashMap<String, String>();            for(String key: env.keySet()){                 if(key.equals("tibco.env.PATH")){                    newEnv.put(key, appendNewValue(env.get(key), binPath));                 }else if(isUsingJRE64(env)){                    newEnv.put(key, appendNewValue(env.get(key), libPath + "/64" +                    getPathSeparator() + libPath));                 }else {                    newEnv.put(key, appendNewValue(env.get(key), libPath));                 }            }            return newEnv;     }     public String appendNewValue(String initValue, String newValue){            StringBuffer sb = new StringBuffer();            sb.append(newValue).append(pathSeparator).append(initValue);            return sb.toString();     }      public void store(Properties traFile, File file, String comments) throws Exception{            FileOutputStream fos = new FileOutputStream(file);            traFile.store(fos, comments);     }     public void store(Properties traFile, String filePath, String comments) throws Exception{            File file = new File(filePath);            store(traFile, file, comments);     }     public Properties updateTraFileValue(Properties prop, String key, String value){            prop.setProperty(key, value);            return  prop;     }     public Properties updateTraFileValue(Properties prop, Map<String, String> map){            for(String key: map.keySet()){                updateTraFileValue(prop, key, map.get(key));            }            return  prop;     }     private String getPathSeparator(){            pathSeparator = System.getProperty("path.separator");            return pathSeparator;     }}

读书人网 >编程

热点推荐