1. 程式人生 > >Java配置檔案Properties的讀取、寫入與更新操作

Java配置檔案Properties的讀取、寫入與更新操作

  1. /**  
  2. * 實現對Java配置檔案Properties的讀取、寫入與更新操作  
  3. */   
  4. package test;   
  5.   
  6. import java.io.BufferedInputStream;   
  7. import java.io.FileInputStream;   
  8. import java.io.FileNotFoundException;   
  9. import java.io.FileOutputStream;   
  10. import java.io.IOException;   
  11. import java.io.InputStream;   
  12. import java.io.OutputStream;   
  13. import java.util.Properties;   
  14.   
  15.   
  16. /**  
  17. * @author  
  18. * @version  
  19. */   
  20. public class SetSystemProperty {   
  21.     //屬性檔案的路徑   
  22.     static String profilepath="mail.properties"
    ;   
  23.     /**  
  24.     * 採用靜態方法  
  25.     */   
  26.     private static Properties props = new Properties();   
  27.     static {   
  28.         try {   
  29.             props.load(new FileInputStream(profilepath));   
  30.         } catch (FileNotFoundException e) {   
  31.             e.printStackTrace();   
  32.             System.exit(-1);   
  33.         } catch (IOException e) {          
  34.             System.exit(-1);   
  35.         }   
  36.     }   
  37.   
  38.     /**  
  39.     * 讀取屬性檔案中相應鍵的值  
  40.     * @param key  
  41.     *            主鍵  
  42.     * @return String  
  43.     */   
  44.     public static String getKeyValue(String key) {   
  45.         return props.getProperty(key);   
  46.     }   
  47.   
  48.     /**  
  49.     * 根據主鍵key讀取主鍵的值value  
  50.     * @param filePath 屬性檔案路徑  
  51.     * @param key 鍵名  
  52.     */   
  53.     public static String readValue(String filePath, String key) {   
  54.         Properties props = new Properties();   
  55.         try {   
  56.             InputStream in = new BufferedInputStream(new FileInputStream(   
  57.                     filePath));   
  58.             props.load(in);   
  59.             String value = props.getProperty(key);   
  60.             System.out.println(key +"鍵的值是:"+ value);   
  61.             return value;   
  62.         } catch (Exception e) {   
  63.             e.printStackTrace();   
  64.             return null;   
  65.         }   
  66.     }   
  67.       
  68.     /**  
  69.     * 更新(或插入)一對properties資訊(主鍵及其鍵值)  
  70.     * 如果該主鍵已經存在,更新該主鍵的值;  
  71.     * 如果該主鍵不存在,則外掛一對鍵值。  
  72.     * @param keyname 鍵名  
  73.     * @param keyvalue 鍵值  
  74.     */   
  75.     public static void writeProperties(String keyname,String keyvalue) {          
  76.         try {   
  77.             // 呼叫 Hashtable 的方法 put,使用 getProperty 方法提供並行性。   
  78.             // 強制要求為屬性的鍵和值使用字串。返回值是 Hashtable 呼叫 put 的結果。   
  79.             OutputStream fos = new FileOutputStream(profilepath);   
  80.             props.setProperty(keyname, keyvalue);   
  81.             // 以適合使用 load 方法載入到 Properties 表中的格式,   
  82.             // 將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流   
  83.             props.store(fos, "Update '" + keyname + "' value");   
  84.         } catch (IOException e) {   
  85.             System.err.println("屬性檔案更新錯誤");   
  86.         }   
  87.     }   
  88.   
  89.     /**  
  90.     * 更新properties檔案的鍵值對  
  91.     * 如果該主鍵已經存在,更新該主鍵的值;  
  92.     * 如果該主鍵不存在,則外掛一對鍵值。  
  93.     * @param keyname 鍵名  
  94.     * @param keyvalue 鍵值  
  95.     */   
  96.     public void updateProperties(String keyname,String keyvalue) {   
  97.         try {   
  98.             props.load(new FileInputStream(profilepath));   
  99.             // 呼叫 Hashtable 的方法 put,使用 getProperty 方法提供並行性。   
  100.             // 強制要求為屬性的鍵和值使用字串。返回值是 Hashtable 呼叫 put 的結果。   
  101.             OutputStream fos = new FileOutputStream(profilepath);              
  102.             props.setProperty(keyname, keyvalue);   
  103.             // 以適合使用 load 方法載入到 Properties 表中的格式,   
  104.             // 將此 Properties 表中的屬性列表(鍵和元素對)寫入輸出流   
  105.             props.store(fos, "Update '" + keyname + "' value");   
  106.         } catch (IOException e) {   
  107.             System.err.println("屬性檔案更新錯誤");   
  108.         }   
  109.     }   
  110.     //測試程式碼   
  111.     public static void main(String[] args) {   
  112.         readValue("mail.properties""MAIL_SERVER_PASSWORD");   
  113.         writeProperties("MAIL_SERVER_INCOMING""[email protected]");          
  114.         System.out.println("操作完成");   
  115.     }