解决修改properties 属性文件存在缓存问题,附带操作properties文件工具类

来源:互联网 发布:下载软件推荐 知乎 编辑:程序博客网 时间:2024/06/05 12:39

     在做项目的时候有些数据不一定需要在数据库管理,例如数据库连接,定时任务等等的配置..有时候需要动态修改这些数据,但在修改完后,再次获取时出现问题.

   在项目中要修改properties,修改之后,再进入相关目录查看properties文件,发现内容已经修改了,但是但通过TaskController.class.getResourceAsStream("/config.properties");获取的数据时,还是没有改变前的数据.

   原因是:.getResourceAsStream是通过缓存中获取的.

   解决办法:能过真实路径获取TaskController.class.getResource("/config.properties").getPath();

 

操作properties文件工具类:

package com.lanyuan.video.util;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.util.Iterator;import java.util.Properties;import java.util.Map.Entry;import com.lanyuan.video.task.TaskController;public class PropertiesUtils {/** * 获取属性文件的数据 根据key获取值 * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上) * @param key * @return */public static String findPropertiesKey(String key) {try {Properties prop = getProperties();return prop.getProperty(key);} catch (Exception e) {return "";}}public static void main(String[] args) {Properties prop = new Properties();InputStream in = TaskController.class.getResourceAsStream("/config.properties");try {prop.load(in);Iterator<Entry<Object, Object>> itr = prop.entrySet().iterator();while (itr.hasNext()) {Entry<Object, Object> e = (Entry<Object, Object>) itr.next();System.err.println((e.getKey().toString() + "" + e.getValue().toString()));}} catch (Exception e) {}}/** * 返回 Properties * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上) * @param  * @return */public static Properties getProperties(){Properties prop = new Properties();String savePath = TaskController.class.getResource("/config.properties").getPath();//以下方法读取属性文件会缓存问题//InputStream in = TaskController.class//.getResourceAsStream("/config.properties");try {InputStream in =new BufferedInputStream(new FileInputStream(savePath));  prop.load(in);} catch (Exception e) {return null;}return prop;}/** * 写入properties信息 *  * @param key *            名称 * @param value *            值 */public static void modifyProperties(String key, String value) {try {// 从输入流中读取属性列表(键和元素对)Properties prop = getProperties();prop.setProperty(key, value);String path = TaskController.class.getResource("/config.properties").getPath();FileOutputStream outputFile = new FileOutputStream(path);prop.store(outputFile, "modify");outputFile.close();outputFile.flush();} catch (Exception e) {}}}