我从属性文件中获取了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类),并且想要从配置(属性)文件中加载所有值,则可以创建一个小助手类并使用反射:
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");
您可以扩展代码以处理更多类型。您也可以更改它以忽略缺少的属性,而不是像现在这样失败,这样字段声明中的分配将保持不变,即是默认设置。