使用Apache Commons Configuration不反映修改后的更改的属性文件

时间:2013-05-09 08:23:58

标签: java properties apache-commons dynamic-programming apache-config

我正在尝试探索Apache commons配置以动态加载属性文件并在文件中进行修改并保存。

我为此写了一个演示代码。

代码段

    package ABC;


    import org.apache.commons.configuration.ConfigurationException;
    import org.apache.commons.configuration.PropertiesConfiguration;
    import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy;




    public class Prop {

        public static void main(String[] args)
        {

            try {
URL propertiesURL = Prop.class.getResource("/d1.properties");

            if (propertiesURL == null) {
              System.out.println("null");
            }
String absolutePath=propertiesURL.getPath();
                PropertiesConfiguration pc = new PropertiesConfiguration(absolutePath);
                pc.setReloadingStrategy(new FileChangedReloadingStrategy());
                String s=(String)pc.getProperty("key_account_sales");
                System.out.println("s is " +  s);
                pc.setAutoSave(true);
                pc.setProperty("key_account_sales", "Dummy");
                pc.save();
                System.out.println("Modified as well");
                String sa=(String)pc.getProperty("key_account_sales");

                System.out.println("s is " +  sa);
            }catch(ConfigurationException ce)
            {
                ce.printStackTrace();
            }
        }

    }

虽然当我多次运行代码时,正确显示了属性的更新值,但在属性文件中看不到更改。

我尝试刷新整个工作区和项目,但属性文件仍显示上一个条目,而此代码在控制台中显示更新的条目。

为什么我的属性文件没有更新?

  

我注意到在bin中形成了一个同名的新文件   我的IDE工作区的目录。此新文件包含必需的   变化。

     

但是我仍然希望旧文件应该使用new更新   值而不是创建一个新文件,它应该在旧的更新   归档。

我的属性文件位于Web应用程序包中,如

  

DEM1

为名
  

Prop1.prop

我想从另一个类中读取此属性文件

  

Reading.java

位于另一个包

  

DEM2

,在同一属性文件中进行更改并将其显示给其他用户。它是部署在应用程序服务器上的Web应用程序。

即使在简单文件(主要功能)中使用绝对路径,它也不会反映同一文件中的更改,而是在新文件中更新。

我正在做一个非常小的错误,但有人可以帮忙。

使用绝对路径我也无法在普通的main方法中对同一属性文件进行更改。请建议。

  

创建bin目录中的新文件,而不是更新同一文件   在src文件夹中。

1 个答案:

答案 0 :(得分:0)

您应该能够使用绝对路径解决此问题。 PropertiesConfiguration类在类路径的某处找到属性文件,只知道写回"d1.properties";因此,您的bin目录中会出现一个文件。

可以通过查询类路径上的资源来获取绝对路径。如下所示:

URL propertiesURL = Prop.class.getResource("/d1.properties");
if (propertiesURL == null) {
  // uh-oh...
}

String absolutePath = propertiesURL.getPath();
// Now use absolutePath