2012-02-04 49 views
1

我已經編寫了一個Java程序,我將它打包並從JAR文件運行。我需要有哪些是簡單的文本行一些用戶可更改的配置文件:將文件加載到分發jar外部

鍵=值

格式。要加載這些文件,我使用了描述類here。當我通過Netbeans IDE運行我的程序時,所有工作都正常,因爲我已經包含了將配置文件存儲在項目屬性中的目錄。

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

那麼,我該如何告訴Java爲我的可加載文件查看JAR的外部? -classpath選項不起作用。

回答

0

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

爲什麼在這種情況下忽略-classpath選項?安全?

+0

對不起,我應該想到這一點;從來沒有這樣去過。至於爲什麼'java'在有清單時忽略'-classpath' ......可能,是的。也簡化了事情(你不能有衝突的路徑等) – 2012-02-04 17:30:47

+0

沒問題。我使用的Propertyloader類(來自Javaworld鏈接)的目的是儘可能簡化配置文件的加載。 Netbeans也不允許..在建造之前手動調整清單(儘管我可以告訴)。 – Kerry 2012-02-04 17:35:07

3

那是因爲你加載它們的方式要求他們從一個罐子中運行時,或者項目目錄,如果沒有內部的.jar內;它依靠類加載器來告訴它在哪裏找到文件。

如果你想打開的.jar之外的文件,你需要只需打開它作爲一個File和閱讀。

一個我們走近這是採取外部文件名作爲方法命令行上的選項(例如java -jar myJar.jar -f filename)。這使您可以明確指出文件的位置。然後,您可以決定是否也查看默認位置,或者如果未在命令行中指定文件,則位於.jar中。

+0

當你說需要文件在JAR中時,你能給我一個參考嗎?當我通過Netbeans運行我的應用程序時,我不明白它們是如何加載的。據我所知,它不會從我的代碼中創建JAR文件。我還沒有找到JAR文件 – Kerry 2012-02-04 17:15:15

+0

@Kerbu - 閱讀我寫的句子的第二部分。當編譯後的類*不是jar時,類加載器會返回項目目錄結構中的位置(編譯後的.class文件的位置)。 – 2012-02-04 17:17:16

+0

謝謝Brian。我解決了這個問題..請參閱下面的答案。 – Kerry 2012-02-04 17:28:22

0

我有同樣的問題,看到你的帖子,但最後的答案很簡單。

我有一個通過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();