2011-12-19 55 views
1

我在Java EE應用程序中讀取屬性文件中的此代碼。 儘管Myservice.properties放置在WEB-INF/classes文件夾下,但在Linux環境中不會讀取這些屬性,但它在Windows環境中可以正常工作。請問InputStreamReader getResourceAsStream在Linux中工作嗎?

InputStreamReader fMainProp = new InputStreamReader(this.getClass().getResourceAsStream("/Myservice.properties")); 

以上只會在windows下工作嗎?

MyWeb() { 
    prop = new Properties(); 
    try { 
     InputStreamReader fMainProp = new InputStreamReader(this.getClass().getResourceAsStream("/Myservice.properties")); 
     prop.load(fMainProp); 
    } catch (FileNotFoundException e1) { 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
} 
+0

Linux中會發生什麼? getResourceAsStream()是否返回null? – 2011-12-19 03:18:39

回答

4

無論是代碼的工作取決於其是否加載調用的類如getClass()在你的代碼所表示的類加載器可以訪問/WEB-INF/classes。顯然這個類本身不在/WEB-INF/classes之內,或者在類路徑的其他位置放置了一個副本,並且在Linux環境中使用的服務器make /版本使用與Windows環境中使用的服務器make/version稍有不同的類加載器層次結構。

事實是,如果你不能保證屬性文件是由同一個類加載器調用的類加載,那麼你不應該試圖通過調用類的類加載器來獲得,但通過上下文當前線程的類加載器。它可以訪問所有內容。

prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("Myservice.properties")); 

請注意,使用這個類加載器,路徑不能是相對的。所以不要以大斜線開頭。

+0

我明白這一點。還有一些混淆正在發生。你可以詳細說明一下這個問題...... _表面上看,這個類本身不在/ WEB-INF /類中,或者在Linux環境中使用的類路徑和服務器make /版本中放置了一個副本使用與Windows環境中使用的服務器版本/版本稍有不同的類加載器層次結構._ – Sriram 2012-04-20 13:12:50

相關問題