1. 程式人生 > >Java專案讀取配置檔案時,FileNotFoundException 系統找不到指定的檔案,System.getProperty("user.dir")的理解

Java專案讀取配置檔案時,FileNotFoundException 系統找不到指定的檔案,System.getProperty("user.dir")的理解

唉,讀取個檔案,也就是在專案裡面去獲得配置檔案的目錄,然後,變成檔案,有事沒事,總是出個 FileNotFoundException  系統找不到指定的檔案,氣死人啦。

還有就是:System.getProperty("user.dir"),都說獲得的是“工作目錄”,有老鐵們在意這個,工作目錄怎麼理解嗎?我這做了個簡單的測試。

但是,你把這個配置檔案放在專案的根目錄下面,也就是 說你的專案資料夾下面直接放一個配置檔案,這個時候,就可以,啥字首不加的,就可以讀取到,這個配置檔案啦。

但是,這麼放置配置檔案,好像有點不合適。

那麼,這個路徑究竟該如何寫,才不會報錯呢?

1,在 java project 中的配置檔案讀取,專案打包是jar型別的。

System.getProperty("user.dir");
解釋:

預設定位到的當前使用者目錄("user.dir")(即工程根目錄)
JVM就可以據"user.dir" + "你自己設定的目錄" 得到完整的路徑(即絕對路徑)
這有個前提,你的工程不是web專案,不然,這個返回值就不是專案的根目錄啦,是tomcat的bin目錄。

2,在 java web project 中的配置檔案讀取

ServletActionContext.getServletContext().xxx
這地方的 ServletActionContext 可不是讓你,直接拿來使用的,得分情況而定。
        System.out.println("getProperty(\"user.dir\") " + System.getProperty("user.dir"));
        System.out.println("getServletContext");
        System.out.println("getRealPath " + request.getSession().getServletContext().getRealPath("/"));
        System.out.println("getContextPath " + request.getSession().getServletContext().getContextPath());
        System.out.println("getResourcePaths " + request.getSession().getServletContext().getResourcePaths("/"));
        System.out.println("getResourcePaths " + request.getSession().getServletContext().getResourceAsStream("/WEB-INF/classes/error.xml"));
        return mav;
想知道這個執行的結果嗎?


getRealPath:
直接幹到了打成war包target下的專案名稱我這叫springMVC。
getContextPath:
這個就是獲得當前URL的地址,我訪問的這個連結全稱是:http://localhost:8080/lxk/student
看執行結果,就是你這個 web app 的名稱啦,因為後面的student算是子功能吧。
getResourcePaths:
獲得的是打包之後target目錄下的專案名稱下的所有的目錄,具體看圖。




一般,老鐵們搜尋文章,都搜尋到的是

System.getProperty("user.dir")
獲得的是工作目錄
,這個搜尋結果千篇一律。簡直可怕

。因為,這些老鐵們從來沒測試過。
什麼叫工作目錄。。。

可以看到,我這個在,Java web專案裡面的允許結果,竟然是tomcat的bin 目錄。這個懂的自然懂,不懂的,還是渣渣的迷糊。

在非Java web 的專案裡面,這個 System.getProperty("user.dir") 的執行結果,如下。