Java从jar中的资源重新加载文本文件

时间:2014-02-22 13:33:46

标签: java maven jar resources settings

我有一个标准的maven项目:

src/

| --- main/*.java

| --- resources/

    |--- settings1.ini

    |--- settings2.ini

这就是我阅读此设置文件的方式:

InputStream settingsFileInputStream = ClassLoader.getSystemResourceAsStream(this.configurationFileName);

一切正常但我必须提供在运行maven编译的.jar文件时在运行时重新加载这些settings1.inisettings2.ini文件的功能。我怎么能这样做?

因为据我所知,我无法访问.jar存档中的任何数据并进行修改。

1 个答案:

答案 0 :(得分:0)

您可以使用ClassLoader.getResourceAsStream(resourcePath)打开的流来访问某个应用程序的JAR文件中的文件(假设它位于类路径中)。

但是,您无法更新JAR文件中的文件。或者更准确:

  • 更新JAR(使用Java SE库)需要重写它,

  • 许多情况,其中应用程序无法写入其JAR文件,

  • 即使可以执行此操作,应用程序也可能只在重新启动后才能看到更新结果,并且

  • 应用程序出于各种原因(包括安全性)以这种方式更新自身是一个坏主意。


如果您希望文件可更新,我建议采用以下方法:

  1. 在用户的计算机上选择文件的标准位置;例如在Linux上,您可以选择当前用户主目录的隐藏子目录。

  2. 启动应用程序时,查看该文件是否存在,以及是否未从JAR文件中的副本填充该文件。

  3. 当应用程序需要读取或更新文件时,请在上述位置读取或更新文件。