首頁 > 軟體

聊聊ResourceBundle和properties讀取組態檔的區別

2021-07-22 13:00:49

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 "";
}
}}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com