1

我试图探索阿帕奇公地配置动态加载属性文件,并在文件中做修改并保存修改后的变化。属性文件没有反映使用Apache Commons Configuration也

我写了一个相同的演示代码。

代码段

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(); 
      } 
     } 

    } 

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

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

为什么我的财产文件没有得到更新?

嗯,我注意到我的IDE工作区的bin 目录中有一个新名称相同的文件。这个新文件包含所需的 更改。

但是我仍然希望旧文件应该更新为新的 值,而不是创建一个新文件,它应该更新旧 文件本身。

我的属性文件位于Web应用程序包内说

DEM1

名称Prop1.prop

我想读在另一类这个属性文件说

Reading.java

位于另一个包内

DEM2

,做此相同的变化属性文件并将其显示给其他用户。它是一个部署在应用程序服务器上的Web应用程序。

即使使用简单文件(主要功能)的绝对路径它不反映在同一个文件的变化,但在新的文件更新之后。

我做一个非常轻微的错误,但能有人帮。

使用绝对路径,我不能做出正常的主要方法也是在同一属性文件的更改。请建议。

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

+0

+1的复制/粘贴例子 – 2013-05-09 09:47:06

回答

0

你应该能够解决这个使用绝对路径。该PropertiesConfiguration类是找到你的属性文件中的某个地方在classpath和只知道写回"d1.properties";因此你有一个文件出现在你的bin目录中。

的绝对路径可以通过在类路径查询资源来获得。像下面这样:

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

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

Agreed.But最终它里面去的Web应用程序,我想我会被强制使用相对路径。在这种情况下,它会再次创建一个新文件,或者它将更新现有文件。这非常重要。假设在内部网和用户运行一个Web应用程序要修改的键/值,我想展现不同的用户修改的键/值。所以更改应该只发生在1个属性文件中。 – AngelsandDemons 2013-05-09 13:40:17

+0

@AngelsandDemons不是问题,见上面我的编辑。获取类路径资源的绝对路径不是问题。 – 2013-05-09 14:44:16

+0

感谢您的帮助。不幸的是,在我的Web应用程序中,属性文件位于名为Property1.prop的包pack1.org1中。你如何建议我去加载这个文件,阅读属性并更新属性文件中的属性,而不是创建一个新的属性文件。我认为这肯定会达到我的目的。 – AngelsandDemons 2013-05-10 07:38:23

相关问题