2010-03-02 116 views
14

我在Eclipse中創建了一個動態Web項目。我在src目錄中創建了一個屬性文件:如何從Java EE Web應用程序訪問屬性文件?

<project-root>/src/props.properties 

我以調試模式通過Eclipse啓動Tomcat。現在我想從我的一個POJO中讀取屬性文件,但是我得到一個FileNotFoundException。當前路徑似乎是Eclipse路徑。

我看了解網絡的解決方案,但沒有一個爲我工作。也許我做錯了什麼。代碼是這樣的:

File file = new File("props.properties"); 
FileReader reader = new FileReader(file); 
properties.load(reader); 

我應該如何訪問屬性文件? 它應該放在哪裏?

在此先感謝。

回答

0

你的項目是否設置爲自動生成?如果是的話(或者你手動建立),檢查props.properties是否出現在你的項目的輸出文件夾(在Eclipse中,這通常是「bin」的,但可能的WebRoot還是別的什麼,這取決於你的項目是如何設置)。

當一個項目構建時,它應該複製配置文件以及編譯的類,JSP等。但是,我相信文件讀取器默認使用JVM的主目錄作爲源代碼。在Eclipse的情況下,這意味着你的props.properties文件必須在項目,即不是「SRC」文件夾中。

22

如果一個Web應用程序,則屬性將被部署到WEB-INF/classes和可使用類加載器

InputStream in = {NameOfClassWhereThisisInvoked}.class.getResourceAsStream("/props.properties"); 
properties.load(in); 
in.close(); 

Actully應該不論工作是否是一個Web應用程序或無法加載。

我假設SRC被定義爲一個源文件夾

+1

感謝所有回答。我忘了提及我通過eclipse啓動tomcat。屬性文件被複制到C:\工作空間\ .metadata位於\ .plugins \ org.eclipse.wst.server.core \ TMP0 \ wtpwebapps \ WebAppName \ WEB-INF \類。現在,我在項目根目錄和src文件夾中有一個props文件的副本,但無論如何我無法訪問它。 – c0d3x 2010-03-02 10:18:19

+0

加載它作爲資源,因爲我上面顯示應該工作 – objects 2010-03-02 10:38:49

+0

你pojo類在哪裏?以上假設它們都由同一個類加載器加載 – objects 2010-03-02 10:56:16

3

沒有這樣做如下的另一種方式:

File file = new File(session.getServletContext().getRealPath("/") + "props.properties"); 

而是「props.properties」你可以在任何路徑相對於給eclipse Web應用程序項目的「WebContent」文件夾。

2

這裏是加載性能從任何地方文件在classpath

private Properties getPropertiesFromClasspath(String propFileName) 
                   throws IOException 
{ 
    Properties props = new Properties(); 
    InputStream inputStream = 
    this.getClass().getClassLoader().getResourceAsStream(propFileName); 

    if (inputStream == null) 
    { 
     throw new FileNotFoundException("property file '" + propFileName 
     + "' not found in the classpath"); 
} 

props.load(inputStream); 
return props; 
} 

您可以創建一個單獨的類在內存中加載的第一次訪問屬性,後來通過一個靜態方法,使用它們的正確方法。這方面的一個完整的例子,請 http://bharatonjava.wordpress.com/2012/09/12/using-properties-file-in-java-application/

+2

你可能應該詳細說明爲什麼這會更好/什麼是折衷,而不是在類上調用getResourceAsStream而不是類加載器。 – EdC 2012-09-16 10:13:29

0

Kepp烏爾屬性在src文件夾中的文件和下面的代碼足以讀取屬性文件

**File file = new File("./src/config.properties"); 
    FileReader reader = new FileReader(file); 
    prop.load(reader); 
    System.out.println(prop.getProperty("directorypath"));** 
相關問題