gpt4 book ai didi

java - 从属性中获取 int、float、boolean 和 string

转载 作者:IT老高 更新时间:2023-10-28 21:08:04 26 4
gpt4 key购买 nike

我有来自属性文件的 int、float、boolean 和 string。一切都已加载到属性中。目前,我正在解析值,因为我知道特定键的预期值。

Boolean.parseBoolean("false");
Integer.parseInt("3")

如果我不知道键的原始值数据类型是什么,那么设置这些常量值的更好方法是什么。

public class Messages {

Properties appProperties = null;
FileInputStream file = null;

public void initialization() throws Exception {

appProperties = new Properties();
try {

loadPropertiesFile();

} catch (Exception e) {
throw new Exception(e.getMessage(), e);
}
}

public void loadPropertiesFile() throws IOException {

String path = "./cfg/message.properties";
file = new FileInputStream(path);
appProperties.load(file);
file.close();
}
}

属性文件。message.properties

SSO_URL = https://example.com/connect/token
SSO_API_USERNAME = test
SSO_API_PASSWORD = Uo88YmMpKUp
SSO_API_SCOPE = intraday_api
SSO_IS_PROXY_ENABLED = false
SSO_MAX_RETRY_COUNT = 3
SSO_FLOAT_VALUE = 3.0

常量.java

public class Constants {
public static String SSO_URL = null;
public static String SSO_API_USERNAME = null;
public static String SSO_API_PASSWORD = null;
public static String SSO_API_SCOPE = null;
public static boolean SSO_IS_PROXY_ENABLED = false;
public static int SSO_MAX_RETRY_COUNT = 0;
public static float SSO_FLOAT_VALUE = 0;
}

最佳答案

如果你有一个配置值类,比如你的 Constants 类,并且你想从配置(属性)文件中加载所有值,你可以创建一个小助手类并使用反射:

public class ConfigLoader {
public static void load(Class<?> configClass, String file) {
try {
Properties props = new Properties();
try (FileInputStream propStream = new FileInputStream(file)) {
props.load(propStream);
}
for (Field field : configClass.getDeclaredFields())
if (Modifier.isStatic(field.getModifiers()))
field.set(null, getValue(props, field.getName(), field.getType()));
} catch (Exception e) {
throw new RuntimeException("Error loading configuration: " + e, e);
}
}
private static Object getValue(Properties props, String name, Class<?> type) {
String value = props.getProperty(name);
if (value == null)
throw new IllegalArgumentException("Missing configuration value: " + name);
if (type == String.class)
return value;
if (type == boolean.class)
return Boolean.parseBoolean(value);
if (type == int.class)
return Integer.parseInt(value);
if (type == float.class)
return Float.parseFloat(value);
throw new IllegalArgumentException("Unknown configuration value type: " + type.getName());
}
}

那你这样调用它:

ConfigLoader.load(Constants.class, "/path/to/constants.properties");

您可以扩展代码以处理更多类型。您还可以将其更改为忽略缺少的属性,而不是像现在这样失败,这样字段声明中的分配将保持不变,即成为默认值。

关于java - 从属性中获取 int、float、boolean 和 string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36723839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com