解决Java Web项目无法读取配置文件问题
錯誤描述
報錯信息如下圖所示,Web應用后臺在讀取配置文件的時候,系統找不到指定的路徑。
這是Java Web項目的目錄結構:
這是報錯部分的代碼:
static {try {Properties prop = new Properties();//讀取配置文件InputStream is = new InputStream("src/main/resources/db.properties");//加載配置文件prop.load(is);driver = prop.getProperty("driver");url = prop.getProperty("url");user = prop.getProperty("user");password = prop.getProperty("password");} catch (Exception e) {e.printStackTrace();} }做出的嘗試:
- 一般遇到這樣的問題的時候,第一反應覺得是路徑不小心打錯了。于是找到db.properties文件鼠標右擊,選擇Copy Qualified Name,復制配置文件的路徑確保路徑的正確性,但是并沒有解決這個問題。
- 既然路徑沒錯還會報錯,就讓我感到很奇怪。于是,我在該類下寫了一個main函數直接跑Java Application去連接數據庫,萬萬沒想到居然成功連接上了(即成功讀取到了配置文件)。
報錯原因:
由上訴第二點應該可以看出來了,其實還是路徑的問題,當時做出了一個大膽的猜想:Java項目本地直接運行(Java Application)的根目錄和Java Web項目在服務器上運行(Run on Service)的根目錄是不同的!
在網上找了相關資料后,證實了我的猜想:
- 當點擊運行Java Application時,項目的根目錄是從target/classes開始的
- 當點擊運行Run on Service時,項目的根目錄是從WEB_INF/classes開始的
PS:至于為什么是這樣,可以去了解一下.classpath文件,它用于記錄項目編譯環境的所有信息,包括:源文件路徑、編譯后class文件存放路徑、依賴的jar包路徑、運行的容器信息、依賴的外部project等信息。
問題解決
知道了出錯原因是在路徑問題上,那我們就把手動輸路徑改為通過Class獲取資源路徑。
獲取路徑的方法如下,如果給getResource()傳入的是"",返回的是JDBCUtils類的路徑;如果
傳入的是"/",返回的是target/classes或WEB_INF/classes。
由上面的截圖可以看到,配置文件db.properties是放在/class下的,所以要找路徑的時候傳入"/db.properties"參數即可。
InputStream is = new FileInputStream(JDBCUtils.class.getResource("/db.properties").getPath()); //等價于 InputStream is = JDBCUtils.class.getResourceAsStream("/db.properties");進行上述更改后,報錯信息消失了。我們來進行如下測試:
用Navicat打開數據表可以發現,注冊信息已經成功插入表中!
參考資料
一個合格的程序員,應該要善于發現問題。?(?>?<)?
總結
以上是生活随笔為你收集整理的解决Java Web项目无法读取配置文件问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ccf-csp #201812-2 小明
- 下一篇: Educational Codeforc