![](/img/trans.png)
[英]Extract image from resources within a java program packaged as a jar file
[英]Java reloading text file from resources within jar
我有一个标准的Maven项目:
src/
| --- main/*.java
| --- resources/
|--- settings1.ini
|--- settings2.ini
这就是我读取此设置文件的方式:
InputStream settingsFileInputStream = ClassLoader.getSystemResourceAsStream(this.configurationFileName);
一切正常,但是当我运行maven编译的.jar文件时,我必须提供在运行时重新加载这些settings1.ini
和settings2.ini
文件的功能。 我怎样才能做到这一点?
因为据我所知,我无法访问.jar存档中的任何数据并对其进行修改。
您可以使用使用ClassLoader.getResourceAsStream(resourcePath)
打开的流来访问应用程序的JAR文件之一中的文件(假定它在类路径中ClassLoader.getResourceAsStream(resourcePath)
。
但是,您无法更新JAR文件中的文件。 或更准确地说:
更新JAR(使用Java SE库)需要重写它,
在许多情况下,应用程序将无法写入其JAR文件,
即使可以做到,应用程序也只能在重新启动后才能看到更新结果,并且
对于应用程序出于各种原因(包括安全性)以这种方式进行自我更新是一个坏主意。
如果您希望文件可更新,我建议采用以下方法:
为用户计算机上的文件选择一个标准位置; 例如,在Linux上,您可以选择当前用户主目录的隐藏子目录。
启动应用程序时,请查看文件是否存在,以及是否不从JAR文件中的副本填充文件。
当应用程序随后需要读取或更新文件时,请在上述位置读取或更新文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.