2016-04-06 92 views
1

我的目標是從Eclipse創建一個可執行的jar文件。我有一個Eclipse項目,運行良好,下面的結構。訪問可執行文件夾中的屬性文件

我的Eclipse項目

src/main/java 
-com.main 
     ->MyClass 

src/main/resources 
->MyProps.properties 

MyClass能夠成功訪問MyProps.properties文件。

在我導出Eclipse項目並創建一個可運行的jar之後,我的jar結構如下所示。

MyJar.jar

-com.main 
    ->MyClass 

-resources 
->MyProps.properties 

當我運行jar文件就無法訪問屬性文件扔NullPointerExeception

我的代碼

InputStream input = MyClass.class.getClassLoader() 
          .getResourceAsStream("resources/MyProps.properties"); 

當我導出我的項目作爲一個可執行的JAR文件,我無法訪問MyProps.properties了。

有人可以幫我嗎?

+2

向我們顯示訪問屬性文件的代碼。 –

+0

請添加您嘗試的代碼。它看起來像一個'maven'項目,你試圖訪問這個文件作爲資源。 –

+0

'InputStream file = MyClass.getResourceAsStream(「/ resources/MyProps.properties」)' – Ferrybig

回答

0

您可以使用如下代碼下面讀取性能上的類路徑文件:

MyClass.class.getClassLoader().getResourceAsStream("MyProps.properties") 
0

奧德在從一個罐子加載文件。您必須使用Class.getResource()Class.getResourceAsStream()

URL properties = ConfigLoaderTest.class.getResource("/resources/MyProps.properties"); 

這會從你的類路徑中加載該文件,thius意味着它也將眼光放在你的類路徑中的罐子裏(可執行的JAR是在classpath中自動)。 第一個'/'表示從你的類路徑上的jar的根目錄來看,你在代碼中省略了這個。

然後您可以像任何URL一樣閱讀URL(如果沒有找到,它將返回null)。立即使用properties.openStream()

請注意,您似乎使用默認的maven結構src/main/resources,但是您的eclipse構建路徑上有src/main,所以在您的jar包中獲得resources目錄。對於Maven項目來說,正常的是在你的構建路徑上有src/main/resources。這將把你的屬性文件放在你的jar的根目錄下。

+0

它應該在罐子裏訪問 –

+0

這也將看你的jar的內容,我已經添加了這個答案。 – Thirler

+0

正如您添加了您的代碼,我突出了與我的帖子中的代碼的區別。 – Thirler

相關問題