2013-10-28 60 views
5

我正在Eclipse中開發動態Web項目。我爲商店數據庫詳細信息(用戶名,密碼等)創建了一個.properties文件。我通過右鍵單擊項目和New - > File來添加它。我使用Java util包的Properties類。但它不起作用。我無法從文件中檢索任何屬性。這裏是我使用的代碼,如何在Eclipse Java Dynamic Web Project中使用.properties文件?

Properties prop = new Properties(); 


    try { 

     prop.load(new FileInputStream("database.properties")); 


      String db = prop.getProperty("database"); 
     String userName = prop.getProperty("dbuser"); 
     String password = prop.getProperty("dbpassword"); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 

有什麼不對或有沒有什麼特別的地方,我應該把屬性文件。

+0

似乎有試圖找到問題database.properties。它位於哪裏?它和你的班級在同一個包裏嗎? – alicia

回答

5

你所做的是正確的,即右鍵點擊項目和新文件。你必須把你的屬性放在你開始jvm的地方。請查看附件圖像。屬性文件被標記爲紅色。看看你的屬性文件是否也是這樣的。 另外,在你的代碼添加此找出把你的文件:

System.out.println(new File(".").getAbsolutePath()); 

欲瞭解更多詳情,請按照此鏈路FileNotFoundException when using java properties file

enter image description here

+2

是啊!我剛剛發現我給出的路徑指的是eclipse文件夾。我檢查了圖像。在那裏你使用絕對路徑。屬性文件。但是,當我將我的項目託管在某些不適用的地方時(給出絕對路徑)。我只想知道是否有任何標準方式保存.properties文件並訪問它。謝謝! – Dilma

+1

這不是使用屬性文件的正確方法。不建議使用絕對路徑。如果您的文件位於C:\\ a.properties中,並且您使用了完整路徑,並且明天將在Linux中部署WAR,但這不起作用。見Nitind的答案 – Oliver

1

嘗試給絕對路徑或相對路徑的特權文件,也檢查此propery文件路徑已被添加到源文件夾或不,它不會被複制到您的類文件夾。 (項目C單擊右鍵,選中Java構建路徑源選項卡下。

4

您應該改爲使用更加便攜java.util.Properties#load(InputStream)javax.servlet.ServletContext#getResourceAsStream(String)結果。

+2

這是做這件事的正確方法。我們必須將文件放在Maven項目的{YourApp} \ src \ main \ resources中。並在WebContent中的非maven動態Web項目 – Oliver

1

你應該有的.properties文件在同一個包中的類正在使用它。

或者更好,讀性能與getResourceAsStream方法文件(否則你可以有一些問題後,當你在的.war歸檔文件)。

InputStream inputStream = 
    getClass().getClassLoader().getResourceAsStream("database.properties"); 
4

通常,您要確保屬性文件位於項目運行時類路徑中(例如, WEB-INF /班),然後使用無論是系統類加載器或屬性文件處理程序的類加載器,即(從內存寫意打字加載 - 不是編譯

try{ 
    Properties p = new Properties(); 
    InputStream in = MyPropertyHandler.getClass() 
      .getClassLoader() 
      .getResourceAsStream("com/package/props/database.properties"); 
    p.load(in); 
catch(IOException e){ 
    e.printStackTrace(System.err); 
} 

我打賭你是不是指着正確的位置。確保你的屬性文件位於正確的位置。使用該代碼,我相信它正在尋找${CURRENT_WORKING_DIR}/database.properties,這是在Eclipse中的Web應用程序的情況是WEB-INF/classes(我認爲)。

+0

耶!我剛剛發現我給出的路徑指的是eclipse文件夾。你的意思是我應該將.properties文件放在使用.properties文件的類中的包中? – Dilma

+0

@Dilma:這不是絕對必要的。你可以把它放在任何地方,但是最簡單的(和更好的做法)是確保它在運行時類路徑中。它甚至不需要是源文件夾 - 只是將某處聲明爲資源位置(例如,ext文件夾)。 – MadConan

相關問題