讀取.properties配置文件在實際的開發中使用的很多,總結了一下,有以下幾種方法(僅僅是我知道的):

一、通過jdk提供的java.util.Properties類。

此類繼承自java.util.HashTable,即實現了Map接口,所以,可使用相應的方法來操作屬性文件,但不建議使用像put、putAll這兩個方法,因爲put方法不僅允許存入String類型的value,還可以存入Object類型的。因此java.util.Properties類提供了getProperty()和setProperty()方法來操作屬性文件,同時使用store或save(已過時)來保存屬性值(把屬性值寫入.properties配置文件)。在使用之前,還需要加載屬性文件,它提供了兩個方法:load和loadFromXML。

load有兩個方法的重載:load(InputStream inStream)、load(Reader reader),所以,可根據不同的方式來加載屬性文件。

可根據不同的方式來獲取InputStream,如:

1、通過當前類加載器的getResourceAsStream方法獲取

InputStream inStream = TestProperties.class.getClassLoader().getResourceAsStream("test.properties");

2、從文件獲取

InputStream inStream = new FileInputStream(new File("filePath"));

3、也是通過類加載器來獲取,和第一種一樣

InputStream in = ClassLoader.getSystemResourceAsStream("filePath");

4、在servlet中,還可以通過context來獲取InputStream

InputStream in = context.getResourceAsStream("filePath");

5、通過URL來獲取

URL url = new URL("path");InputStream inStream = url.openStream();

二、通過java.util.ResourceBundle類來讀取,這種方式比使用Properties要方便一些。

1、通過ResourceBundle.getBundle()靜態方法來獲取(ResourceBundle是一個抽象類),這種方式來獲取properties屬性文件不需要加.properties後綴名,只需要文件名即可。

ResourceBundle resource = ResourceBundle.getBundle("com/mmq/test");//test爲屬性文件名,放在包com.mmq下,如果是放在src下,直接用test即可String key = resource.getString("username");

2、從InputStream中讀取,獲取InputStream的方法和上面一樣,不再贅述。

ResourceBundle resource = new PropertyResourceBundle(inStream);

注意:在使用中遇到的最大的問題可能是配置文件的路徑問題,如果配置文件入在當前類所在的包下,那麼需要使用包名限定,如:test.properties入在com.mmq包下,則要使用com/mmq/test.properties(通過Properties來獲取)或com/mmq/test(通過ResourceBundle來獲取);屬性文件在src根目錄下,則直接使用test.properties或test即可。

相關文章