2010-01-15 145 views
4

我使用Netbeans開發了Java桌面應用程序。 在我的應用程序,我使用的一些屬性文件,我把它放在項目文件夾下,這樣我可以用這樣的打包Java應用程序時,jar文件中不包含屬性文件

Properties props = new Properties(); 
props.load(new FileInputStream("config.properties")); 

代碼訪問,但是當我部署和打包我的應用程序.jar文件,我找不到屬性文件的位置,我的應用程序無法從屬性文件讀取值。

我該如何解決這個錯誤,以及我應該在哪裏放置我的屬性文件並加載它?

+0

檢查我的附錄。 – 2010-01-15 10:56:10

回答

5

把它放在/src/resources/下,然後像下面一樣使用它。

ResourceBundle props = ResourceBundle.getBundle("resources.config"); 

NetBeans不包含項目目錄下的文件。此外,您需要構建該項目,以便讓NetBeans將properties文件放入/classes目錄中。那麼你應該可以通過運行你的應用程序或者只是一個特定的Java類來獲得它。

乾杯。

+0

我跟着你的指導,但程序拋出一個異常 java.util.MissingResourceException:無法找到捆綁的基本名稱配置,地區en_US 在java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1521) 是java。 util.ResourceBundle.getBundleImpl(ResourceBundle.java:1260) – 2010-01-15 09:37:00

+0

查看我的附錄。準確地說,試試這個'ResourceBundle.getBundle(「resources.config」)'。而且,在運行任何特定的Java類之前構建項目。 – 2010-01-15 10:41:22

2

要包括存在於classpath中的屬性文件(即,如果它是某個地方/ src目錄下,當你構建JAR文件),你可以使用的getResourceAsStream()是這樣的:

Properties properties = new Properties(); 
properties.load(this.getClass().getResourceAsStream("/config.properties")); 

註文件名上的前導斜線。您也可以使用它來獲取項目中不同包中的文件。

properties.load(this.getClass().getResourceAsStream("/com/company/project/config.properties")); 
2

在你的Java項目,在默認包(即.../src目錄/),把這個文件:messages.properties

在你的代碼,把這個:

ResourceBundle f = ResourceBundle.getBundle("messages"); 

這種方法具有迷人的方面,它實際上工作!

(有人編輯,文明的我原來的職位,其中有很多的尖叫聲在裏面。我看到一些漂亮的答案無效票獲得,這是我還沒有看到很長一段時間在這個網站。)

3

我從拉菲小子的解決方案開始,並沒有奏效。那麼,如果我已經完成了他所說的話,它就會奏效。這就是我所做的,也許它會添加一些有用的細節。

我一直叫這個項目後,我的包,所以我不知道,在NetBeans中有字面上,一個名爲<default package>包。當我將我的config.properties文件拖到Source Packages級別時,看到一個<default package>。它被放置在src文件夾中,並建立在dist .jar文件的根目錄下。之後,ralphie boy的解決方案就是剪貼。

如果你希望你的資源包或配置文件是在包,你必須包括在基本名稱字符串它的路徑,像

ResourceBundle f = ResourceBundle.getBundle("pkgname/config"); 

ResourceBundle f = ResourceBundle.getBundle("com/mycompany/pkgname/config"); 
相關問題