不用重启程序,动态读取配置文件

  1. import java.io.File;   
  2. import java.io.FileInputStream;   
  3.   
  4. import java.util.Properties;   
  5.   
  6.   
  7.   
  8.   
  9.   
  10.   
  11.   
  12. public class ReadConfigation{   
  13.            
  14.     /**  
  15.     * 属性文件全名  
  16.     */  
  17.     private static final String PFILE ="Config.properties";   
  18.     /**  
  19.     * 对应于属性文件的文件对象变量  
  20.     */  
  21.     private  File m_file = null;   
  22.     /**  
  23.     * 属性文件的最后修改日期  
  24.     */  
  25.     private  long m_lastModifiedTime = 0;   
  26.     /**  
  27.     * 属性文件所对应的属性对象变量  
  28.     */  
  29.     private  Properties m_props = null;   
  30.     /**  
  31.     * 本类可能存在的惟一的一个实例  
  32.     */  
  33.     private static ReadConfigation m_instance =new ReadConfigation();   
  34.     /**  
  35.     * 私有的构造子,用以保证外界无法直接实例化  
  36.     */  
  37.     private ReadConfigation()   
  38.     {   
  39.         m_file = new File(PFILE);   
  40.         m_lastModifiedTime = m_file.lastModified();   
  41.         if(m_lastModifiedTime == 0){   
  42.             System.err.println(PFILE +" file does not exist!");   
  43.         }   
  44.         m_props = new Properties();   
  45.         try  
  46.         {   
  47.             m_props.load(new FileInputStream(PFILE));   
  48.         }   
  49.         catch(Exception e)   
  50.         {   
  51.             e.printStackTrace();   
  52.         }   
  53.     }   
  54.     /**  
  55.     * 静态工厂方法  
  56.     * @return 返还ReadConfigation 类的单一实例  
  57.     */  
  58.     synchronized public static ReadConfigation getInstance()   
  59.     {   
  60.         return m_instance;   
  61.     }   
  62.     /**  
  63.     * 读取一特定的属性项  
  64.     *  
  65.     * @param name 属性项的项名  
  66.     * @param defaultVal 属性项的默认值  
  67.     * @return 属性项的值(如此项存在), 默认值(如此项不存在)  
  68.     */  
  69.      public  String getConfigItem(String name,String defaultVal)   
  70.     {   
  71.         long newTime = m_file.lastModified();   
  72.         // 检查属性文件是否被其他程序   
  73.         // 如果是,重新读取此文件   
  74.        
  75.         if(newTime == 0)   
  76.         {   
  77.             // 属性文件不存在   
  78.             if(m_lastModifiedTime == 0){   
  79.                 System.err.println(PFILE+ " file does not exist!");   
  80.             }else{   
  81.                 System.err.println(PFILE+ " file was deleted!!");   
  82.             }   
  83.             return defaultVal;   
  84.         }else if(newTime > m_lastModifiedTime){   
  85.             // Get rid of the old properties   
  86.             m_props.clear();   
  87.             try  
  88.             {   
  89.                 m_props.load(new FileInputStream(PFILE));   
  90.             }catch(Exception e){   
  91.                 e.printStackTrace();   
  92.             }   
  93.         }   
  94.             m_lastModifiedTime = newTime;   
  95.             String val = m_props.getProperty(name);   
  96.             if( val == null )   
  97.             {   
  98.                 return defaultVal;   
  99.             }   
  100.             else  
  101.             {   
  102.                 return val;   
  103.             }   
  104.     }    
  105.    public   String getConfigItem(String name){   
  106.         return getConfigItem(name,"");   
  107.     }   
  108. }  
package com.hexiang.utils; import java.io.File; import java.io.FileInputStream; import java.util.Properties; public class ReadConfigation{ /** * 属性文件全名 */ private static final String PFILE ="Config.properties"; /** * 对应于属性文件的文件对象变量 */ private File m_file = null; /** * 属性文件的最后修改日期 */ private long m_lastModifiedTime = 0; /** * 属性文件所对应的属性对象变量 */ private Properties m_props = null; /** * 本类可能存在的惟一的一个实例 */ private static ReadConfigation m_instance =new ReadConfigation(); /** * 私有的构造子,用以保证外界无法直接实例化 */ private ReadConfigation() { m_file = new File(PFILE); m_lastModifiedTime = m_file.lastModified(); if(m_lastModifiedTime == 0){ System.err.println(PFILE +" file does not exist!"); } m_props = new Properties(); try { m_props.load(new FileInputStream(PFILE)); } catch(Exception e) { e.printStackTrace(); } } /** * 静态工厂方法 * @return 返还ReadConfigation 类的单一实例 */ synchronized public static ReadConfigation getInstance() { return m_instance; } /** * 读取一特定的属性项 * * @param name 属性项的项名 * @param defaultVal 属性项的默认值 * @return 属性项的值(如此项存在), 默认值(如此项不存在) */ public String getConfigItem(String name,String defaultVal) { long newTime = m_file.lastModified(); // 检查属性文件是否被其他程序 // 如果是,重新读取此文件 if(newTime == 0) { // 属性文件不存在 if(m_lastModifiedTime == 0){ System.err.println(PFILE+ " file does not exist!"); }else{ System.err.println(PFILE+ " file was deleted!!"); } return defaultVal; }else if(newTime > m_lastModifiedTime){ // Get rid of the old properties m_props.clear(); try { m_props.load(new FileInputStream(PFILE)); }catch(Exception e){ e.printStackTrace(); } } m_lastModifiedTime = newTime; String val = m_props.getProperty(name); if( val == null ) { return defaultVal; } else { return val; } } /** * 读取一特定的属性项 * * @param name 属性项的项名 * @return 属性项的值(如此项存在), 空(如此项不存在) */ public String getConfigItem(String name){ return getConfigItem(name,""); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值