2014-02-22 121 views
0

內我有一個非標準Maven項目:從Java資源重新加載文本文件的jar

src/ 

| --- main/*.java 

| --- resources/ 

    |--- settings1.ini 

    |--- settings2.ini 

這是我讀這個方式設置文件:

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

所有工作正常,但我必須提供在運行maven-compiled .jar文件時,可以在運行時重新加載這些settings1.inisettings2.ini文件。我怎樣才能做到這一點?

因爲據我所知,我無法訪問.jar歸檔中的任何數據並對其進行修改。

回答

0

您可以使用使用ClassLoader.getResourceAsStream(resourcePath)打開的流訪問應用程序的一個JAR文件(假設它在類路徑中)中的文件。

但是,您無法更新JAR文件中的文件。或者更準確:

  • 更新JAR(使用Java SE庫)需要重寫它,

  • 很多情況下一個應用程序將無法寫入其JAR文件,

  • 即使能做到這一點,應用程序可能只看到更新的結果,它已重新啓動後,和

  • 這是一個糟糕的ID ea應用程序出於各種原因以這種方式更新自己......包括安全性。


如果你想要的文件是可更新的,我建議以下辦法:

  1. 選擇用戶機器上的文件的標準位置;例如在Linux上,您可以選擇當前用戶的主目錄的隱藏子目錄。

  2. 在啓動應用程序時,請查看該文件是否存在,以及是否未從JAR文件中的副本填充文件。

  3. 當應用程序需要讀取或更新文件時,請在上述位置讀取或更新它。

+0

完全一樣的東西,我認爲是我的解決方案,你說服了我,謝謝。 –