我有一个标准的maven项目:
src/
| --- main/*.java
| --- resources/
|--- settings1.ini
|--- settings2.ini
这就是我阅读此设置文件的方式:
InputStream settingsFileInputStream = ClassLoader.getSystemResourceAsStream(this.configurationFileName);
一切正常但我必须提供在运行maven编译的.jar文件时在运行时重新加载这些settings1.ini
和settings2.ini
文件的功能。我怎么能这样做?
因为据我所知,我无法访问.jar存档中的任何数据并进行修改。
答案 0 :(得分:0)
您可以使用ClassLoader.getResourceAsStream(resourcePath)
打开的流来访问某个应用程序的JAR文件中的文件(假设它位于类路径中)。
但是,您无法更新JAR文件中的文件。或者更准确:
更新JAR(使用Java SE库)需要重写它,
有许多情况,其中应用程序无法写入其JAR文件,
即使可以执行此操作,应用程序也可能只在重新启动后才能看到更新结果,并且
应用程序出于各种原因(包括安全性)以这种方式更新自身是一个坏主意。
如果您希望文件可更新,我建议采用以下方法:
在用户的计算机上选择文件的标准位置;例如在Linux上,您可以选择当前用户主目录的隐藏子目录。
启动应用程序时,查看该文件是否存在,以及是否未从JAR文件中的副本填充该文件。
当应用程序需要读取或更新文件时,请在上述位置读取或更新文件。