/** * 經過java.util.resourceBundle來解析properties文件。 * @param String path:properties文件的路徑 * @param String key: 獲取對應key的屬性 * @return String:返回對應key的屬性,失敗時候爲空。 */ public static String getPropertyByName1(String path,String key){ String result = null; try { result = ResourceBundle.getBundle(path).getString(key).trim(); } catch (Exception e) { e.printStackTrace(); } return result; }
對於String path的填寫,要注意。通常分爲兩種狀況:java
一、.properties文件在src目錄下面,文件結構以下所示:函數
|src/this
— —test.propertiesget
二、.properties文件在src目錄下面的一個包中,由於可能咱們常常習慣把各類properties文件創建在一個包中。文件結構以下:input
|src/it
|— —configure/io
| | — —test1.propertiesclass
| | — —test2.propertiestest
對於第一種狀況,在main函數中使用方法以下:file
System.out.println(GetConfigureInfo.getPropertyByName1("test", "key1"));
對於第二種狀況,在main函數中使用方法以下:
System.out.println(GetConfigureInfo.getPropertyByName1("configure.test1", "key1"));
這種用法下,path不用帶.properties後綴,直接輸入就行了。
/** * 解析properties文件。 * @param String path:properties文件的路徑 * @param String key: 獲取對應key的屬性 * @return String:返回對應key的屬性,失敗時候爲null。 */ public String getPropertyByName2(String path,String key){ String result = null; Properties properties = new Properties(); try { InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(path); if(inputStream == null){ properties.load(inputStream); result = properties.getProperty(key).trim(); inputStream.close(); } } catch (Exception e) { e.printStackTrace(); } return result; }
一樣兩種狀況:
一、.properties文件在src目錄下面
使用方法是:
GetConfigureInfo getConfigureInfo = new GetConfigureInfo(); System.out.println(getConfigureInfo.getPropertyByName2("test1.properties", "key1"));
二、.properties文件在src目錄下面的一個包中:
使用方法:
GetConfigureInfo getConfigureInfo = new GetConfigureInfo(); System.out.println(getConfigureInfo.getPropertyByName2("configure/test1.properties", "key1"));
能夠看到很明顯的這種相似於文件的讀寫,因此用法有所不一樣了都。
/** * 寫入.properties文件, key=content * @param String path:寫入文件路徑 * @param String key:寫入的key * @param String content:寫入的key的對應內容 * @return void */ public void setProperty(String path,String key,String content){ Properties properties = new Properties(); try { properties.setProperty(key, content); //true表示追加。 if((new File(path)).exists()){ FileOutputStream fileOutputStream = new FileOutputStream(path, true); properties.store(fileOutputStream, "just for a test of write"); System.out.println("Write done"); fileOutputStream.close(); } } catch (Exception e) { e.printStackTrace(); } }
使用方式:
GetConfigureInfo getConfigureInfo = new GetConfigureInfo(); getConfigureInfo.setProperty("src/testConfig.properties", "test3", "test3 value");
值得注意的是,如今這個函數裏面的path竟然加了src/,由於是用FileOutputStream,因此默認的主路徑是項目路徑。
對於Java而言,我以爲這些路徑就搞得很不合理的樣子,如今看來,使用輸入輸出流讀寫文件時候,彷佛主路徑都是在項目下。
而對於ResourceBundle讀取properties文件的路徑不加.properties也很奇特啊。彷佛java中各類不一樣方式來加載文件時候都有默認的主路徑(也能夠說成根目錄)
根目錄也就決定了這個路徑到底應該怎麼寫,才能被程序識別。我如今還不得而知,先記錄下這些區別。
若是你們有什麼想指正、教育個人地方,歡迎指出,小弟想知道究竟是怎麼樣子的。