昨天,在小小的探索下,整理出一篇博文:Web開發筆記(五):idea路徑問題(classloader讀取文件),提前說明一下,昨天寫的這篇有一點點小問題,在今早被發現了,於是,經過一早上的摸索,終於明白了idea中讀取文件的路徑問題了。這篇博客對昨天的進行一些修改,並進行一個小小的總結。
前提
創建一個web工程:IntelliJ IDEA 配置Tomcat 運行Web項目
我創建的目錄結構如下:
注意:把前端頁面,資源文件都存放在web目錄下!!!WEB-INF目錄只有classes,lib,web.xml三個文件,一定注意,要不後面會出大問題。
讀取各種資源文件時的路徑問題
file目錄下有config.properties文件,該怎麼填寫路徑進行讀取呢?
1、getServletContext().getResourceAsStream("file/config.properties");
注意:這裏給出的路徑是相對路徑!那麼,既然是相對路徑,那是相對誰呢?看下圖:
idea的web工程裏,這個路徑就是相對路徑的根路徑!
因爲當tomcat運行後,會生成這個out目錄:
2、getServletContext().getRealPath("file/config.properties");
這個方法讀取文件的時候相對路徑的寫法和上面的一樣。
3、類加載器讀取文件
類加載器讀取文件就不一樣了。如果this.getClass().getClassLoader().getResourceAsStream("file/config.properties");這樣寫,會發生錯誤。因爲類加載器的路徑在這:
所以,我有個簡單的方法。
這樣操作,就是讓file目錄成爲一個根目錄。這樣,上面的錯誤代碼就可以寫爲this.getClass().getClassLoader().getResourceAsStream("config.properties");
總結:
idea的目錄確實很讓人費解,我也是花了很多心思,才懂得了一些,不知道我的這一套總結,在以後的編程會不會出錯。不過目前這樣用時可以的。
1、前端頁面,資源文件等,放在web目錄下,WEB-INF目錄只有classes,lib,web.xml三個文件。
2、相對路徑,相對的是
3、類加載器的路徑是:
4、我的建議是,每次寫路徑都以“/Servlet_war_exploded”開頭,然後根據實際情況補充後面的路徑。
“/Servlet_war_exploded”需要與設置的應用上下文相對應。
如有錯誤,還請指正。