• 对Java配置文件Properties的读取、写入与更新操作


    http://breezylee.iteye.com/blog/1340868

    对Java配置文件Properties的读取、写入与更新操作
    注:当前项目路径是
    String filepath=System.getProperty("user.dir");

    对下面的程序很有用...

    /**
    * 实现对Java配置文件Properties的读取、写入与更新操作
    */
    package test;

    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Properties;


    /**
    * @author
    * @version
    */
    public class SetSystemProperty {
        //属性文件的路径
        static String profilepath="mail.properties";
        /**
        * 采用静态方法
        */
        private static Properties props = new Properties();
        static {
            try {
                props.load(new FileInputStream(profilepath));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                System.exit(-1);
            } catch (IOException e) {       
                System.exit(-1);
            }
        }

        /**
        * 读取属性文件中相应键的值
        * @param key
        *            主键
        * @return String
        */
        public static String getKeyValue(String key) {
            return props.getProperty(key);
        }

        /**
        * 根据主键key读取主键的值value
        * @param filePath 属性文件路径
        * @param key 键名
        */
        public static String readValue(String filePath, String key) {
            Properties props = new Properties();
            try {
                InputStream in = new BufferedInputStream(new FileInputStream(
                        filePath));
                props.load(in);
                String value = props.getProperty(key);
                System.out.println(key +"键的值是:"+ value);
                return value;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
       
        /**
        * 更新(或插入)一对properties信息(主键及其键值)
        * 如果该主键已经存在,更新该主键的值;
        * 如果该主键不存在,则插件一对键值。
        * @param keyname 键名
        * @param keyvalue 键值
        */
        public static void writeProperties(String keyname,String keyvalue) {       
            try {
                // 调用 Hashtable 的方法 put,使用 getProperty 方法提供并行性。
                // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
                OutputStream fos = new FileOutputStream(profilepath);
                props.setProperty(keyname, keyvalue);
                // 以适合使用 load 方法加载到 Properties 表中的格式,
                // 将此 Properties 表中的属性列表(键和元素对)写入输出流
                props.store(fos, "Update '" + keyname + "' value");
            } catch (IOException e) {
                System.err.println("属性文件更新错误");
            }
        }

        /**
        * 更新properties文件的键值对
        * 如果该主键已经存在,更新该主键的值;
        * 如果该主键不存在,则插件一对键值。
        * @param keyname 键名
        * @param keyvalue 键值
        */
        public void updateProperties(String keyname,String keyvalue) {
            try {
                props.load(new FileInputStream(profilepath));
                // 调用 Hashtable 的方法 put,使用 getProperty 方法提供并行性。
                // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
                OutputStream fos = new FileOutputStream(profilepath);           
                props.setProperty(keyname, keyvalue);
                // 以适合使用 load 方法加载到 Properties 表中的格式,
                // 将此 Properties 表中的属性列表(键和元素对)写入输出流
                props.store(fos, "Update '" + keyname + "' value");
            } catch (IOException e) {
                System.err.println("属性文件更新错误");
            }
        }
        //测试代码
        public static void main(String[] args) {
            readValue("mail.properties", "MAIL_SERVER_PASSWORD");
            writeProperties("MAIL_SERVER_INCOMING", "327@qq.com");       
            System.out.println("操作完成");
        }
    }

    另一个例子:此处的文件common.properties和 Config类都在class src下面

    Java代码  收藏代码
    1. public static String getValue(String key) {  
    2.         try {  
    3.             InputStream inputStream = Config.class.getClassLoader().getResourceAsStream("common.properties");  
    4.             property.load(inputStream);  
    5.         } catch (Exception e) {  
    6.             e.printStackTrace();  
    7.         }  
    8.         return (String) property.get(key);  
    9.     }  
  • 相关阅读:
    Duang!异地多活!_InfoQ_传送门
    异地多活设计辣么难?其实是你想多了!-博客-云栖社区-阿里云
    途牛谭俊青:多数据中心状态同步&两地三中心的理论
    魅族多机房部署方案
    荔枝FM架构师刘耀华:异地多活IDC机房架构
    zz
    “异地多活”多机房部署经验谈_运维管理_数据中心_中国IDC圈
    天猫双11晚会和狂欢城的互动技术方案
    案例 | 魅族云端同步的架构实践和协议细节
    如何应对大促?看京东核心中间件团队的高可用实践指南
  • 原文地址:https://www.cnblogs.com/donaldlee2008/p/5907783.html
走看看 - 开发者的网上家园