0

我需要维护一个字符串和 int 常量文件来为我的应用程序声明配置参数。为了获得良好的性能,我将它们声明为 static final一个简单的 java 类中的常量。但是现在我意识到我也应该能够拥有多个这样的配置文件并轻松地从使用一个配置文件切换到另一个配置文件。现在我有这样的文件:

public final class Config {
    public static final String A1="...";
    public static final String A2="...";
           ...
    public static final String AN="...";

}

要使用任何配置参数,我只是这样使用:Config.A1

这些参数在应用程序中大量使用,因此我希望直接访问具有良好性能的字段(而不是通过 getter 方法)。

但是我应该如何维护多个这样的配置文件并允许轻松地从一个切换到另一个?

4

2 回答 2

1
public final class Config {
    public static final String A1;
    public static final String A2;
    ...
    public static final String AN;

    static
    {
        Properties props = new Properties ();
        try
        {
            props.load (new FileInputStream (System.getProperty ("config.file")));
        }
        catch (IOException ex)
        {
            throw new RuntimeException (ex);
        }
        A1 = props.getProperty ("A1");
        A2 = props.getProperty ("A2");
        ...
        AN = props.getProperty ("AN");
    }
}

然后您可以使用系统属性config.file来指定要使用的配置文件。

于 2013-03-04T09:31:52.733 回答
0

使用属性文件。存储应在系统属性中使用的属性文件。

这是你如何做到这一点的一个例子。您应该使用单例而不是静态方法,并且应该保持加载 ResourceBundle 而不是每次都加载属性文件。这只是一个例子。

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

public class Config {

    //Stores the currently used property file
    private static String route;

    public static String getRoute() {
        return route;
    }

    public static void setRoute(String route) {
        this.route = route;
    }

    //Read a value from a properties file.
    //Mikhail Vladimirov wrote another way of doing it, so this is just an example of another way of doing it.
    private static String fetchTextFrom(String key, String route) {
        String text = null;
        try {
            ResourceBundle bundle = ResourceBundle.getBundle(route);
            text = bundle.getString(key);
        } catch (MissingResourceException mre) {
            text = key;
        }
        return text;
    }

    //Read a value from the current properties file
    public static String fetchText(String key) {
        return fetchTextFrom(key, getRoute());
    }
}
于 2013-03-04T09:48:55.263 回答