當前位置:首頁 » Java教學 » Java ResourceBundle, Properties

Java ResourceBundle, Properties

Java ResourceBundle, Properties用法實例

ResourceBundle, Properties

ResourceBundle:開發一個項目, 配置文件是少不了的, 一些需要根據環境進行修改的參數, 都有得放到配置文件中去, 在Java中一般是通過一個properties文件來實現的, 這個文件以properties結尾。 內部結構是二維的, 以key=value的形式存在。 如下:

options.column.name.case=1

options.column.bean.serializable=1

options.column.bean.defaultconstructor=1

options.column.method.setter=1

options.general.user.version=1.0

database.connection[0]=csc/csc@localhost_oci8

database.connection[1]=cscweb/cscweb@localhost_thin


ResourceBundle用來解析這樣的文件, 它的功能是可以根據你的Locale來進行解析配置文件, 如果一個產品需要進行多語言支持, 比如在不同語種的係統上, 會顯示根據它的語言顯示相應的界麵語言, 就可以定義多份的properties文件, 每個文件的key是一樣的, 隻是value不一樣, 然後在application起動的時候, 可以判彆本機的Locale來解析相應的properties文件。 Properties文件裡麵的數據得要是Unicode。 在jdk下麵可以用native2ascii這個命令進行轉換。 例: native2ascii Message.txt Message.properties 會生成一個Unicode的文件。

Properties: Properties這個類其實就是從Hashtable繼承下來的, 也就是說它是一個散列表, 區彆在於它的key與value都是String型的, 另外也加了幾個常用的方法:

Ø         String getProperty(String key)  取得一個property

Ø         String getProperty(String key, String defaultValue)  取property, 如果不存在則返回defaultValue。

Ø         void list(PrintStream out)  向out輸出所有的properties

Ø         void list(PrintWriter out)

Ø         Enumeration propertyNames()  將所有的property key名以Enumeration形式返回。

Ø         Object setProperty(String key, String value) 設置一個property。


ResourceBundle與Properties一般結合起來使用。 它們的用法很簡單, 由ResourceBundle解析出來的key與value然後放至到一個靜態的Properties成員變量裡麵去, 然後就可以通過訪問Properties的方法進行讀取Property。 下麵給個簡單的例子:

public class PropertyManager implements Serializable {

/** 定義一個靜態的Properties變量 */

private static Properties properties = new Properties();

/**

 * 通過一個類似於類名的參數進行Property文件的初期化

 * 比如現在有一個文件叫Message.properties, 它存放在

 * ejb/util下麵並且, 這個目錄在運行的classpath下麵

 * 則in就為ejb.util.Message

 *

 */

public static void init(String in) throws MissingResourceException {

    ResourceBundle bundle = ResourceBundle.getBundle(in);

    Enumeration enum = bundle.getKeys();

    Object key = null;

    Object value = null;

    while (enum.hasMoreElements()) {

        key = enum.nextElement();

        value = bundle.getString(key.toString());

        properties.put(key, value);

    }}

/**

 * 取得一個Property值

 */

public static String getProperty(String key) {return properties.get(key); }

/**

 * 設置一個Property值

 */

public static void setProperty(String key, String value) {properties.put(key, value); }

}


不過現在的Java產品中,越來越傾向於用XML替換Properties文件來進行配置。 XML配置具有層次結構清楚的優點。