聊聊ResourceBundle和properties讀取配置文件的區別

java.util.ResourceBundle 和java.util.properties 讀取配置文件區別

這兩個類都是讀取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.編碼問題:

無論系統的默認編碼是什麼,ResourceBundle在讀取properties文件時統一使用iso8859-1編碼。

因此,如果在默認編碼為 GBK的系統中編寫瞭包含中文的properties文件,經由ResourceBundle讀入時,必須轉換為GBK格式的編碼,否則不能正確識別。

2.用法:

ResourceBundle:

ResourceBundle conf= ResourceBundle.getBundle("config/fnconfig/fnlogin");
String value= conf.getString("key");

Properties:

Properties prop = new Properties();
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();

ResourceBundle 讀取Properties文件及亂碼處理

package read; 
import java.util.ResourceBundle;
/**
 * 屬性文件工廠類
 * @author W
 * @version V1.0
 * @date 2013-4-17
 */
public interface ReadPropertiesFactory {
	public ResourceBundle getErrorResource();	
} 
================================================  

package read; 
import java.util.ResourceBundle;
 
/**
 * 
 * @author 
 * @version V1.0
 * @date 2013-5-13
 */
public class ReadPropertiesFactoryImpl implements ReadPropertiesFactory {
	private ResourceBundle errorResouce;
	
	public ResourceBundle getErrorResource() {
		if(errorResouce == null){
                     //隻要讀取properties的名稱就可以瞭
			errorResouce = ResourceBundle.getBundle("errorMessage");
		}
		return errorResouce;
	} 	
}
===============================================
 
package util; 
import java.io.UnsupportedEncodingException; 
/**
 * 
 * @author 
 * @version V1.0
 * @date 2013-4-17
 */
public class StringHanlder {
	public static String transformCodeIso8859Style(String code , String codeStyle) throws UnsupportedEncodingException{
		return new String(code.getBytes("ISO-8859-1"),codeStyle);
	}
	public static String transformCodeUtf8Style(String code , String codeStyle) throws UnsupportedEncodingException{
		return new String(code.getBytes("utf-8"),codeStyle);
	}
}
=========================================================================
errorMessage.properties文件中的屬性
E01010024=查詢數據異常!
=============================================================================
package www.man.comService;
import java.util.ResourceBundle;
import read.ReadPropertiesFactoryImpl;
public class TestService {public static void main(String[] args) {
String a= TestService.getErrorValue("E01010070");System.out.println(a);}
private static  ResourceBundle getErrorResource() {
ReadPropertiesFactoryImpl readPropertiesFactory =new ReadPropertiesFactoryImpl();
return readPropertiesFactory.getErrorResource();
}
public  static String getErrorValue(String key){
try{
return util.StringHanlder.transformCodeIso8859Style(getErrorResource().getString(key),"utf-8");
}catch(Exception e){
e.printStackTrace();return "";
}
}}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: