簡體   English   中英

將文件加載到分發罐外部

[英]Load files External To The Distribution Jar

我已經編寫了一個Java程序,該程序可以從JAR文件打包並運行。 我需要具有一些用戶可更改的配置文件,這些文件只是以下內容的文本行:

鍵=值

格式。 要加載這些文件,我使用了此處描述的類。 當我通過Netbeans IDE運行程序時,由於在Project屬性中包括了用於存儲配置文件的目錄,因此一切正常。

當我將應用程序構建到JAR文件中時,就會出現問題。 因為我希望配置文件是用戶可編輯的,所以我將它們保留在JAR之外,但位於同一目錄中,但是現在當我從命令行運行應用程序時,它找不到配置文件。 如果我將文件手動添加到ROOT文件夾下的JAR文件中,那么一切都很好。

那么,如何告訴Java在JAR之外查找我的可加載文件? -classpath選項無效。

這是因為從jar運行時,它們的加載方式要求它們位於.jar內;否則,它們必須位於項目目錄內; 它依賴於類加載器來告訴它在哪里可以找到文件。

如果要在.jar外部打開文件,則只需將其作為File打開並讀入即可。

我們采用的方法之一是在命令行上使用外部文件名作為選項(例如java -jar myJar.jar -f filename )。 這使您可以明確說明文件的位置。 然后,您可以決定是否還查找默認位置,或者如果未在命令行上指定文件,則在.jar中查找。

我遇到了同樣的問題,看到了您的帖子,但最后的答案很簡單。

我有一個通過Java Webstart部署的應用程序,並且正在Netbeans 7.3中構建它。

我有一個屬性文件config.xml,它將在運行時根據用戶首選項進行更新,例如“記住我的密碼”。 因此,它必須在jar文件外部。

Netbeans在項目文件夾下創建一個“ dist”文件夾。 此文件夾包含項目jar文件和jnlp文件。 我將config.xml復制到dist文件夾,並使用標准文件加載了屬性文件

    FileInputStream in = new FileInputStream("config.xml");
    testData.loadFromXML(in);
    in.close();

我通過參考這個問題解決了它。 我將當前目錄添加到jar的MANIFEST文件中,並且可以正常工作。

我想知道為什么在這種情況下-classpath選項被忽略了嗎? 安全?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM