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

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

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

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

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

 

操作properties文件工具类:

[java][/java] view plaincopyprint?

  1. package com.lanyuan.video.util;
  2. import java.io.BufferedInputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.util.Iterator;
  7. import java.util.Properties;
  8. import java.util.Map.Entry;
  9. import com.lanyuan.video.task.TaskController;
  10. public class PropertiesUtils {
  11.     /**
  12.      * 获取属性文件的数据 根据key获取值
  13.      * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
  14.      * @param key
  15.      * @return
  16.      */
  17.     public static String findPropertiesKey(String key) {
  18.         try {
  19.             Properties prop = getProperties();
  20.             return prop.getProperty(key);
  21.         } catch (Exception e) {
  22.             return “”;
  23.         }
  24.     }
  25.     public static void main(String[] args) {
  26.         Properties prop = new Properties();
  27.         InputStream in = TaskController.class
  28.                 .getResourceAsStream(“/config.properties”);
  29.         try {
  30.             prop.load(in);
  31.             Iterator<Entry<Object, Object>> itr = prop.entrySet().iterator();
  32.             while (itr.hasNext()) {
  33.                 Entry<Object, Object> e = (Entry<Object, Object>) itr.next();
  34.                 System.err.println((e.getKey().toString() + “” + e.getValue()
  35.                         .toString()));
  36.             }
  37.         } catch (Exception e) {
  38.         }
  39.     }
  40.     /**
  41.      * 返回 Properties
  42.      * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上)
  43.      * @param
  44.      * @return
  45.      */
  46.     public static Properties getProperties(){
  47.         Properties prop = new Properties();
  48.         String savePath = TaskController.class.getResource(“/config.properties”).getPath();
  49.         //以下方法读取属性文件会缓存问题
  50. //      InputStream in = TaskController.class
  51. //              .getResourceAsStream(“/config.properties”);
  52.         try {
  53.             InputStream in =new BufferedInputStream(new FileInputStream(savePath));
  54.             prop.load(in);
  55.         } catch (Exception e) {
  56.             return null;
  57.         }
  58.         return prop;
  59.     }
  60.     /**
  61.      * 写入properties信息
  62.      *
  63.      * @param key
  64.      *            名称
  65.      * @param value
  66.      *            值
  67.      */
  68.     public static void modifyProperties(String key, String value) {
  69.         try {
  70.             // 从输入流中读取属性列表(键和元素对)
  71.             Properties prop = getProperties();
  72.             prop.setProperty(key, value);
  73.             String path = TaskController.class.getResource(“/config.properties”).getPath();
  74.             FileOutputStream outputFile = new FileOutputStream(path);
  75.             prop.store(outputFile, “modify”);
  76.             outputFile.close();
  77.             outputFile.flush();
  78.         } catch (Exception e) {
  79.         }
  80.     }
  81. }

标签