2012-02-23 135 views
4

我在使用類路徑查找配置文件時遇到了一些麻煩。Java類路徑和配置文件

我用:

InputStream stream = myclass.class.getResourceAsStream("properties.file"); 

的properties.file位於config目錄下。

當使用eclipse運行程序時,它可以工作。 我剛剛在啓動配置中的類路徑中添加了配置文件夾。

但是如果我要運行導出的罐子這樣的:

java -jar -cp C:\project\lib;C:\project\config myclass.jar 

我得到的哦精彩java.lang.NullPointerException,因爲它無法找到該文件。

這聽起來很經典和愚蠢,但我找不到線索。 eclipse做了什麼,我不知道?

感謝

回答

1

爲了讓您的出口Jar Files訪問您的resources

  1. Right Click您的項目在Eclipse的
  2. 選擇New -> Source Folder,現在命名此Source Folder作爲,說resources
  3. 現在手動通過File System
  4. 添加config folder到這個文件夾現在回到你的EclipseRight Click你的項目和選擇Refresh

現在您可以在Project Tree中看到添加的文件夾。現在,爲了訪問您的配置文件夾的內容寫:

InputStream stream = myclass.class.getResourceAsStream("/resources/config/properties.file"); 
+1

是的,這將工作(做這樣的事情之前),但後來作爲源文件夾,它會被添加到構建路徑中,然後打包到jar文件中。因此,如果我想更改屬性文件中的參數,我會被刪除,因爲程序使用了jar中的參數:( – user1228291 2012-02-23 12:26:28

+0

@ user1228291:我猜,在您運行項目時,Eclipse會自動將它添加到您的類路徑中,檢查你的bin/classes文件夾,無論你的資源中有什麼東西,文件夾將被添加到bin/classes文件夾。Ahha,現在我明白了,你是對的,好像是:-)但是提供絕對文件路徑也不是一個好主意, 我猜。 – 2012-02-23 12:29:45

+0

試試這個http://stackoverflow.com/a/35058865/1533783 – 2016-01-28 10:45:50

0

如果您不想在您的罐子配置文件,您可以在路徑傳遞到配置文件中的命令行爭取您的應用程序。

java -jar myclass.jar C:\project\config 

,然後通過絕對路徑

public static void main(String[] args) 
{ 
    String pathToConfig = args[1]; //or 0/2, check to see 
    String configFilePath = pathToConfig + "/properties.file"; 
    String[] lines = FileUtil.ReadLines(configFilePath); 

} 

加載該文件,但我建議反對,因爲你將有一個艱難的時間進行部署。該文件必須存在於目標中,並且每次都必須以不同的方式啓動程序。

+0

是的,我同意你的看法。這就是爲什麼我想能夠告訴Java「好的,在我用classpath告訴過的文件夾中查找properties.file」。這樣它會查看config目錄並找到該文件。 事實上,我甚至希望能夠運行:java -jar myclass.jar my_properties_file,而java會瀏覽類路徑中的每個文件夾並找到它。 – user1228291 2012-02-23 12:45:06

2

您應該使用絕對路徑類(如果你不不希望把屬性文件中的jar相對你的類)

InputStream stream = myclass.class.getResourceAsStream("/properties.file"); 

或者乾脆

InputStream stream = myclass.class.getClassLoader().getResourceAsStream("properties.file"); 

然後確保包含此資源文件的dir路徑在運行jar時會在類路徑中指定,以便systemclassloader能夠找到此資源。

0

如果鍵入java -help你會看到下面的用法:

用法:JAVA [-options]類[參數...] (執行類)
或Java [-options] -jar jar文件[參數...] (執行一個jar文件)

因此,也許你將需要修復的命令如下:

java -cp C:\project\lib;C:\project\config -jar myclass.jar 

您也可以嘗試以下方法:

java -classpath C:\project\lib;C:\project\config -jar myclass.jar 

或者運行程序之前,甚至設置類路徑:

set CLASSPATH=C:\project\lib;C:\project\config 
java -jar myclass.jar