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