zoukankan      html  css  js  c++  java
  • Java实现动态加载读取properties文件

    问题: 当我们使用如下语句加载.properties时:

    ClassLoader classLoader = this.getClass().getClassLoader();
    Properties prop = new Properties();
    prop.load(classLoader.getResourceAsStream("/Application.properties"));

      

    会发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件。

    解决

    Properties prop = new Properties();
    InputStream is = new FileInputStream(绝对路径);
    prop.load(is);  

    此时,FileInputStream不会将.properties保存在缓存中,即可以解决此问题。但另外让人困惑的 一个问题会产生,即绝对路径,会导致程序的通用性不好。这个问题是由于ClassLoader.getResourceAsStream是直接寻找 classes下的文件,FileInputStream则需要用完整的绝对路径。

    完美解决

    Properties prop = new Properties();
    String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
    InputStream is = new FileInputStream(path + "/VoucherManagement.properties");
    

      

    此时已无需给出.properties绝对路径,实现动态加载。

  • 相关阅读:
    非常简洁的js图片轮播
    js广告图片轮播
    图片轮播
    分享到QQ空间、新浪微博、腾讯微博和人人网
    五星简单操作
    Struts2 多文件上传
    CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
    JavaScript中的数据类型
    JavaScript中对象是否需要加引号?
    变量提升(hoisting)
  • 原文地址:https://www.cnblogs.com/xiohao/p/5561094.html
Copyright © 2011-2022 走看看