ava.util.ResourceBundle 和java.util.properties 讀取配置文件區別java
這兩個類都是讀取properties格式的文件的,而Properties同時還能用來寫文件。
Properties的處理方式是將其做爲一個映射表,並且這個類表示了一個持久的屬性集,他是繼承HashTable這個類。ResourceBundle本質上也是一個映射,可是它提供了國際化的功能。
假設電腦設置的地區是中國大陸,語言是中文
那麼你向ResourceBundle(資源約束名稱爲base)獲取abc變量的值的時候,ResourceBundle會前後搜索
base_zh_CN_abc.properties
base_zh_CN.properties
base_zh.properties
base.properties
文件,直到找到abc爲止
相應的,在英國就會去找base_en_GB_abc.properties等。
所以,你只須要提供不一樣語言的資源文件,而無需改變代碼,就達到了國際化的目的。
另外,在.properties裏面,不能直接使用中文之類文字,而是要經過native2ascii轉乘\uxxxx這種形式
附: 編碼
1.編碼問題:spa
不管系統的默認編碼是什麼,ResourceBundle在讀 取properties文件時統一使用iso8859-1編碼。所以,若是在默認編碼爲 GBK的系統中編寫了包含中文的properties文件,經由ResourceBundle讀入時,必須轉換爲GBK格式的編碼,不然不能正確識別。xml
2.用法:繼承
ResourceBundle:ci
ResourceBundle conf= ResourceBundle.getBundle("config/fnconfig/fnlogin");資源
String value= conf.getString("key");get
Properties:it
Properties prop = new Properties();io
try { InputStream is = getClass().getResourceAsStream("xmlPath.properties");
prop.load(is);
//或者直接prop.load(new FileInputStream("c:/xmlPath.properties"));
if (is != null) { is.close();
} } catch (Exception e) { System.out.println( "file " + "catalogPath.properties" + " not found!\n" + e); } String value= prop.getProperty("key").toString();