在java中从属性文件访问属性的最佳方法
我有属性文件在java中从属性文件访问属性的最佳方法,java,properties,Java,Properties,我有属性文件app.properties,它有50个不同的属性。 我使用 Properties prop = new Properties(); prop.load("app.properties"); System.out.prinltn(prop.getProperty("APPNAME")); 实际上,我想摆脱对属性的访问,比如prop.getProperty(“APPNAME”)。java中有没有访问属性的最佳方法 我可以在java类中将所有变量声明为静态变量 static Stri
app.properties
,它有50个不同的属性。
我使用
Properties prop = new Properties();
prop.load("app.properties");
System.out.prinltn(prop.getProperty("APPNAME"));
实际上,我想摆脱对属性的访问,比如prop.getProperty(“APPNAME”)
。java中有没有访问属性的最佳方法
我可以在java类中将所有变量声明为静态变量
static String appName = prop.getProperty("APPNAME");
还有其他最好的方法吗 您可以使用“resourceBundle”包作为
首先导入resourceBundle API:
import java.util.ResourceBundle;
创建属性文件的实例:
private static ResourceBundle resource = ResourceBundle.getBundle("app");
现在,您可以获得该属性的值:
String appName = resource.getString("APPNAME");
在我看来,使用静态变量保存值的方法是最好的。以下结构是我在一个项目中使用的相同功能
package snippet;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
public class Constants {
public static final String APPNAME;
public static final String VERSION;
public static final int DEFAULT_TIMEOUT;
static {
Properties p = new Properties();
try {
p.load(new FileInputStream("constants.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
APPNAME = p.getProperty("APPNAME");
VERSION = p.getProperty("VERSION");
DEFAULT_TIMEOUT = Integer.parseInt(p.getProperty("DEFAULT_TIMEOUT"));
}
}
当然,也有检查
NumberFormatException
等方法。我可以建议两种方法:
1.定义一个实用方法,该方法将字符串作为参数并从属性返回值
例如:
public static String GetValue(String key) {
return properties.getProperty(key);
}
现在您可以在调用者上使用此函数
String value = GetValue("key"); // properties.getProperty("key");
String value = GetValue(KEY); //GetValue("key");
如果只执行选项1,代码的可读性将提高。但我会推荐第二个选项,它使您的代码既可读又可维护
您可以轻松地执行以下操作:
如果您将变量存储在
Properties()
中,则实际上不会。您可以使变量静态最终字符串appName=代码>它将为您提供以下代码:String appName=Properties.appName代码>我会用getter和setter将您的属性封装在一个类中。通过这种方式,您可以以正确的类型访问数据,并可能更改属性和/或getter的名称,而不更改其他名称。