1

我正在尝试探索 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 应用程序包内

演示1

道具1.prop

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

阅读.java

位于另一个包内

DEM2

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

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

我犯了一个非常轻微的错误,但有人可以帮忙。

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

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

4

1 回答 1

0

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

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

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

String absolutePath = propertiesURL.getPath();
// Now use absolutePath
于 2013-05-09T09:46:44.433 回答