【问题标题】:How to reload properties file in java如何在java中重新加载属性文件
【发布时间】:2020-08-02 19:02:10
【问题描述】:

请任何人帮助我重新加载属性文件。 我有这样的代码

Properties prop = new Properties();
InputStream trackerFileStream = 
    LoadProperty.class.getClassLoader().getResourceAsStream("sample.properties");
prop.load(trackerFileStream);

通过类加载器加载属性文件后,我修改了属性文件。 我无法在同一程序执行中获得最新的修改。

谁能建议我如何在不重新执行程序的情况下重新加载属性文件?

【问题讨论】:

  • 修改了属性文件后,是否执行上述代码?
  • 为什么要将属性用于它们不打算用于的东西?如果您需要修改一些数据,为什么不使用诸如 pub/sub 主题之类的东西,其中修改器会为任何订阅者发布更改。你也可以使用事件。
  • 为什么要在运行时更改类路径中的属性而不是相对(或绝对)位置?
  • 只需要新建一个InputStream,清除prop对象,再一次load。
  • 是否在重新加载属性后覆盖文件?如果你从不将它们重新保存到磁盘,你总是会得到以前的结果

标签: java


【解决方案1】:

如果您想更新,您需要不时检查资源并重新加载属性。

从类路径加载属性是个问题。如果您使用文件系统,您可以检查文件的最后修改属性并决定是否重新加载它。在 java 7 中,你可以注册监听器,当文件被修改时会回调你。加载资源时不能这样做。

但你可以做得更好。使用来自 apache 的 configuration 包。它已经实现了重新加载逻辑,因此您只需处理实际映射到资源的“配置”,并确保您始终获得更新的数据。

【讨论】:

    【解决方案2】:

    您是否正确关闭/刷新流?为什么使用类加载器来访问文件?如果文件是外部文件,您应该通过普通的FileInputStream 访问它,例如

    【讨论】:

    • 但在我的情况下,我无法指定文件的确切位置。这就是我使用类加载器的原因
    • 在实际生产中,您的应用程序被打包为 .jar 文件,并且无法在运行时对其进行修改。需要读取和修改的文件运行时应放置到指定的绝对或相对路径。
    • 感谢 jabal,是的,在关闭 InputStream 后它正在工作文件(即能够读取属性文件的最新值)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2019-09-29
    • 2018-04-18
    • 2012-11-28
    • 2014-11-26
    • 2011-11-27
    相关资源
    最近更新 更多