2011-03-12 78 views
3

我想讀一個屬性的上下文路徑從我的應用程序文件,如何從java中的webservice獲取屬性文件的上下文路徑?

properties.load(this.getClass().getResourceAsStream(path)); 



import java.util.Properties; 

public class test1 { 

    public String getValues() 
    { 
     PropertiesFileReader fileReader = new PropertiesFileReader(); 

     Properties prop = fileReader.getProp("/messages/AttachFile.properties"); 

     String out = prop.getProperty("FILE_NAME"); 

     return out; 
    } 
} 

這工作時的屬性文件是WEB-INF -> classes -> messages -> myfile 下,但是當我將此文件移動到其他文件夾一樣WEB-INF -> messages -> myfile它不似乎得到的路徑...

編輯:我不使用servlet ...

+1

mebbe它只是一個類路徑問題。嘗試添加類路徑中的其他文件夾,看看它是否正常 – govi 2011-03-12 13:34:03

+0

@ govi沒有它沒有讓我在那裏...任何想法 – 2011-03-12 13:38:53

回答

0

,你只需要在前面加上/WEB-INF/

"/WEB-INF/messages/myfile"; 
+0

我想它沒有servlet上下文,因爲我沒有使用servlets – 2011-03-12 13:27:16

+0

以及我建議你在Maven資源中使用Maven插入 – bluefoot 2011-03-12 14:12:07

2

如果失敗,因爲新路徑不是類路徑的一部分,而Class#getResourceAsStream()則從類路徑加載資源。默認情況下,/WEB-INF/classes是Servlet API規範中指定的類路徑的一部分,這就是它工作的原因。我建議將它保存在類路徑中或將新路徑/WEB-INF/resources添加到類路徑中。

如果你使用像Eclipse的IDE,那麼你可以通過在項目的構建路徑將其添加爲源文件夾(這將構建時將它放回/WEB-INF/classes反正)做到這一點。或者,也可以在Java源根目錄中創建一個resources包,然後將該文件放在那裏。它也將成爲類路徑的一部分。

0

當你說你不使用servlet時,你是什麼意思?這段代碼如何運行?
基本上,當您使用servlet時,只有WEB-INF/classes和WEB-INF/lib在類路徑中。所以你不能使用類加載器來訪問資源。但是你可以使用ServletContext訪問它們。因此,假設您的代碼在Servlet/JSP中運行,您可以執行以下操作:

getServletContext().getResourceAsStream("your resource starting from web-application root");