我从属性文件中获取了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();
}
}
属性文件。messassge.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
Constant.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");
您可以扩展代码以处理更多类型。您也可以更改它以忽略缺少的属性,而不是像现在这样失败,这样字段声明中的分配将保持不变,即是默认设置。
问题内容: 我有一个像 从上面的字符串中,我需要获取一个值。 当我使用替换所有功能。 当字符串有两个点时,这将不起作用。 浮点值的位置可能有所不同。 问题答案: 首先丢弃所有非float字符,然后像这样隐秘给Float:
我想从application.properties文件中定义的键中读取整数值。这是我的属性文件。 spring.rabbitmq.port=31111 代码如下: 代码有问题的行是:
问题内容: 我正在从AWS解析一个cron字符串,看起来像这样。有没有一种干净的方法可以追溯到使用Go的内置类型?该类型允许映射到,但似乎没有办法进行相反的操作。我想念什么吗?现在,我已经写了这个得到我使用这样的:。 问题答案: 前言: 我在中发布了此实用程序,请参见。 这是目前最好的方法。 最好的方法是使用包级变量,并且仅填充一次地图。 通过这种方式进行人口调查更加干净和安全: 测试它: 输出(
问题内容: 所以我可以这样做: 但是我找不到办法。我想做类似的事情: 这也不起作用: 问题答案: Swift 2.0 您可以使用构造函数初始化Integer
我有相同格式的不同唯一字符串。字符串看起来像这样,我想从这个字符串中获取唯一的整数值。每次这个值都必须相同,并且依赖于字符串。我尝试将字符串的每个字符转换为int,然后将字符彼此相加。但如果我有两个字符串具有相同的一组符号,它返回的整数值彼此相等。所以不适合我。如何从唯一字符串生成唯一整数值? 更新: 考虑了所有给定的解决方案后,我决定创建函数,生成唯一的整数值。我希望它能排除碰撞。
我正在使用CodeIgniter 3和PostgreSQL 9.4数据库。如果数据库中相应列的数据类型是布尔值,有没有办法在PHP中获取布尔值? 我使用CodeIgniters查询生成器类,如下所示: 用户表中的所有布尔值都由字符串('t'和'f')表示。