如何在Runnable JAR中存储和检索属性?

use*_*293 4 java jar properties

我正在尝试使用Java类属性在执行之间保存应用程序的设置.之后我想将我的应用程序导出到可运行的JAR文件中,并保留这个文件中所需的所有内容以提供可移植性.所以我的应用程序必须找到属性文件,加载它然后在退出时将新设置保存到其中.

装载工作正常:

Properties prop = new Properties().load(this.getClass().getResourceAsStream("properties.cfg"));
Run Code Online (Sandbox Code Playgroud)

但是对于存储,我需要找到相同的文件并覆盖它.方法Properties.store()需要一个OutputStream,但getResourceAsStream返回一个InputStream,因此我找不到该文件并访问它.

它应始终位于*.class文件中.我发现许多解决方案在导出到JAR之前有效但没有一个在导出后可以工作.谢谢你的任何建议.

Bri*_*new 8

你不能重写你的jar(或者更确切地说,它很复杂并且不是一个好主意).

一个更好的解决方案是从以下位置读取属性:

  1. 您计算机上的目录
  2. .jar文件

最初,位置1没有属性文件,您将回退到您的.jar文件.当您编写属性时,您将它们写入指定目录,然后在下一次阅读时,您将从此位置读取属性.重启等等.

请注意,诸如Apache Commons Configuration之类的库会自动支持这种分层属性定位机制,并且可以为您编写自己的解决方案节省一些时间/精力.