篇二十一:Java程序中读取配置文件
读取配置文件
1、web项目运行时,在程序中获取
优点:代码简单,统一配置,多个文件也只是需要在配置文件中添加就可以了
缺点:只能在web工程中使用,或者Junit中使用,Java工程不支持
2、Java工程运行时,在程序中获取
优点:支持Java工程,可以写一个公共方法,然后在任意位置使用
缺点:不能统一加载,只能在使用的时候去调用方法查询,代码相对多一点
一、web项目运行时获取
1、继承PropertyPlaceholderConfigurer
package com.common.util.resource; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.MissingResourceException; import java.util.Properties; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; public class PropertiesUtil extends PropertyPlaceholderConfigurer { private static Map<String, String> ctxPropertiesMap; //在springContext.xml文件中依赖bean,可以初始化 private List<String> decryptProperties; @Override protected void loadProperties(Properties props) throws IOException { //读取配置文件中的值 super.loadProperties(props); ctxPropertiesMap = new HashMap<String, String>(); for(Object key:props.keySet()){ String keyStr = key.toString(); String value = props.getProperty(keyStr); if(decryptProperties != null && decryptProperties.contains(keyStr)){ props.setProperty(keyStr, value); } ctxPropertiesMap.put(keyStr, value); } } /** * 根据key获取值 * @param key:键 * @return */ public static String getString(String key){ try { return ctxPropertiesMap.get(key); } catch (MissingResourceException e) { return null; } } /** * 根据key获取值 * @param key:键 * @param defaultValue:值为空时的默认值 * @return */ public static String getString(String key,String defaultValue){ String value = ctxPropertiesMap.get(key); if(StringUtils.isEmpty(value)){ return defaultValue; } return value; } /** * 根据key获取值 * @param key:键 * @return */ public static int getInt(String key){ return Integer.parseInt(ctxPropertiesMap.get(key)); } /** * 根据key获取值 * @param key:键 * @param defaultValue:值为空时的默认值 * @return */ public static int getINt(String key,int defaultValue){ String value = ctxPropertiesMap.get(key); if(StringUtils.isEmpty(value)){ return defaultValue; } return Integer.parseInt(value); } public List<String> getDecryptProperties() { return decryptProperties; } public void setDecryptProperties(List<String> decryptProperties) { this.decryptProperties = decryptProperties; } public static void main(String[] args) { System.out.println(Integer.parseInt("")); } }
2、springcontext.xml中配置
<!-- 项目运行时,读取配置文件到java Properties类中,供运行中的程序获取使用 --> <bean class="com.common.util.resource.PropertiesUtil"> <property name="locations"> <list> <!-- 所有配置文件的路径在parent工程中统一配置路径 --> <value>${system.basic.config.path}</value> </list> </property> </bean>
3、在Java代码中使用
PropertiesUtil.getString("jdbc.user");
二、Java工程运行时,在程序中获取
package com.common.util.resource; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.ResourceBundle; /** * 资源文件工具类 * 1、建议把资源文件统一放置在 src/main/resource 路径下,如果要区别对待,可以在该路径下添加包 * 2、资源文件的路径写相对于 src/main/resource 的路径,文件名不包含文件后缀 * 3、ResourceBundle解析中文乱码,先安装 Properties Editor插件,然后参考getValue(String key)方法处理 * @author liuguangping * */ public class ResourceUtil { private ResourceBundle resourceBundle; /** * 私有方法获取资源文件 * @param resource:文件放到resource路径下面,文件名不需要文件类型(.properties) */ private ResourceUtil(String resource){ resourceBundle = ResourceBundle.getBundle(resource); } /** * 获取ResourceUtil对象 * @param resource * @return */ public static ResourceUtil getResourceUtil(String resource){ return new ResourceUtil(resource); } /** * 根据key获取值:先通过ResourceUtil.getResourceUtil(resource)方法获取ResourceBundle对象 * @param key * @return */ public String getValue(String key){ try { return new String(resourceBundle.getString(key).getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } } /** * 获取资源文件所有key-value值:需先初始化ResourceUtil对象 * @return */ public Map<String, String> getMap(){ Map<String, String> map = new HashMap<String, String>(); try { for(String key:resourceBundle.keySet()){ map.put(key, resourceBundle.getString(key)); } } catch (Exception e) { e.printStackTrace(); return null; } return map; } /** * 修改properties文件的值,功能未实现,功能待完善 * @param resource * @param key * @param value */ public static void updateValue(String resource,String key,String value){ Properties pro = new Properties(); InputStream in = null; try { // String filePath = ResourceUtil.class.getResource(resource).getFile(); System.out.println(filePath); // in = ResourceUtil.class.getResourceAsStream(filePath); in = new BufferedInputStream(new FileInputStream(filePath)); pro.load(in); FileOutputStream out = new FileOutputStream(filePath); pro.put(key, value); pro.store(out, "配置文件修改"); } catch (Exception e) { e.printStackTrace(); } } }

浙公网安备 33010602011771号