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

我正在尝试探索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(); } } } 

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

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

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

好吧,我注意到在我的IDE工作区的bin目录中形成了一个具有相同名称的新文件。 此新文件包含所需的更改。

但是我仍然希望旧文件应该使用新值更新,而不是创建新文件,它应该在旧文件本身中更新。

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

DEM1

以…的名义

Prop1.prop

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

Reading.java

位于另一个包内

DEM2

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

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

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

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

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

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

可以通过查询类路径上的资源来获取绝对路径。 类似于以下内容:

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