当前位置: 首页 > 知识库问答 >
问题:

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

商和颂
2023-03-14

我正在尝试探索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

姓名:

项目1。道具

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

阅读JAVA

位于另一个包内

Dem2

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

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

我犯了一个很小的错误,但请有人帮忙。

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

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

共有1个答案

晋安国
2023-03-14

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

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

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

String absolutePath = propertiesURL.getPath();
// Now use absolutePath
 类似资料:
  • 我创建了一个TableView,并为每个TableColumn注册了属性。内部数据的编辑可以很好地反映在TableView中。 然而,对于ListView,情况就不同了。除非我关闭框架并再次打开它,否则更改不会立即显示。

  • 问题内容: 我希望使用该类来更改Java中文件的时间戳记元数据。 我想更改所有3个Linux / ext4时间戳(最后修改,访问和更改)。 我可以按如下方式更改前两个时间戳字段: 但是,我无法修改文件的最后一次 更改: 时间。同样,值得关注的是文档中没有提到更改时间戳。最接近的可用属性是,我尝试没有成功。 关于如何根据Java中的自定义时间戳修改文件元数据的任何想法? 谢谢! 问题答案: 我可以使

  • 当然,有关标准的事物是如此之多。有时每个应用程序的配置格式都略有不同, 书写正则表达式来解析和修改所有这些配置文件是一项很烦人的工作。 幸好 Augeas 在这方面可以帮助我们。Augeas 是一个旨在简化使用不同配置文件格式工作的工具, 它将不同格式的配置文件统一呈现为一个简单的包含所有配置项的树状结构。 Puppet 的 Augeas 支持允许你创建 augeas 资源,它可以智能地自动地为所

  • 任何人都知道哪个属性文件或配置文件存储了weblogic 12c服务器的T3网址。我必须通过配置/属性文件通过登录服务器来编辑/更改T3网址。(不是通过管理控制台)。有一些限制,我不必使用管理控制台。我想通过命令提示符来更改它。我已经谷歌了这个,但在任何地方都找不到这个信息。 谢谢你的帮助。

  • 问题内容: 我来自Java,试图弄清楚Go的类型系统是如何工作的。我想创建一个简单的图形数据结构并实现广度优先搜索。到目前为止,这就是我所拥有的。 当我尝试使用测试代码运行它时: 在我的String()方法中,len(node.neighbors)始终为0。我在做什么错?我以为,因为我在addEdge中采用了引用类型,所以它修改了节点引用,但显然我缺少有关Go的类型系统的信息。 问题答案: 这不是

  • 问题内容: 配置 : Spring 2.5,Junit 4,Log4j 从系统属性中指定log4j文件位置 在运行时,使用-D java选项设置系统属性。一切都很好。 问题/我需要什么: 在单元测试时,未设置系统属性,并且文件位置未解析。 App使用Spring,想简单地配置Spring以 设置 系统属性。 更多信息: 要求仅用于配置。无法引入新的Java代码或IDE中的条目。理想情况下,Spri