![](/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.