日期:2014-05-18  浏览次数:20759 次

如何写一个关于配置的类
我在程序里想写一个配置类

每次运行WEB工程的时候自动实例化

并且只能有一个实例

其中的内容是从配置文件中读取的

我想问下如何实现这个功能

读取配置文件这个可以不用去管,我有现成的代码

------解决方案--------------------
这个简单。一种方法是自己写:

import org.apache.log4j.Logger;

import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.HashMap;

/**
* .properties 配置文件读取类
*/
public class Config {

private static Logger log = Logger.getLogger(Config.class);
private static HashMap bundles = new HashMap();
private static final String BASE_NAME = "basename.of.properties.file ";

/**
* 从配置文件中读取一个值
*
* @param s 键名
*
* @return 键值。如果键名不存在,则返回null。
*/
public static String getString(String s) {
try {
return getResourceBundle(BASE_NAME).getString(s);
} catch (MissingResourceException e) {
log.error( "找不到配置 ' " + s + "请检查 " + BASE_NAME.replaceAll( "\\. ", "/ ") + ".properties ", e);
return " ";
}
}

/**
* 从配置文件中读取一个值
*
* @param s 键名
* @param baseName 资源名称
*
* @return 键值。如果键名不存在,则返回null。
*/
public static String getString(String baseName, String s) {
try {
return getResourceBundle(baseName).getString(s);
} catch (MissingResourceException e) {
log.error( "找不到配置\ " " + s + "\ ", 请检查 " + baseName.replaceAll( "\\. ", "/ ") + ".properties ", e);
return " ";
}
}

/**
* get config file
*
* @param baseName 资源名称
*
* @return ResourceBundle
*/
private static synchronized ResourceBundle getResourceBundle(String baseName) {
ResourceBundle bundle = (ResourceBundle) bundles.get(baseName);
if (bundle == null) {
bundle = ResourceBundle.getBundle(baseName);
bundles.put(baseName, bundle);
}
return bundle;
}
}

使用的时候只需要如下调用:
String username = Config.getString( "username ");


另一种方法是使用 apache commons-configuration 包。使用方法楼主自己去看吧。