Java配置文件找不到指定_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;想知道這個運行的結果嗎?

95af9741102eb758451fbb91344fb661.png

getRealPath:

直接干到了打成war包target下的項目名稱我這叫springMVC。

getContextPath:

這個就是獲得當前URL的地址,我訪問的這個鏈接全稱是:http://localhost:8080/lxk/student

看運行結果,就是你這個 web app 的名稱啦,因為后面的student算是子功能吧。

getResourcePaths:

獲得的是打包之后target目錄下的項目名稱下的所有的目錄,具體看圖。

fae8dff48b356b68bee8fc7bc868f7e5.png

ca422141f5f1b08aaea18bbd48feadfc.png

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

System.getProperty("user.dir")

獲得的是工作目錄,這個搜索結果千篇一律。簡直可怕。因為,這些老鐵們從來沒測試過。

什么叫工作目錄。。。

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

在非Java web 的項目里面,這個 System.getProperty("user.dir") 的運行結果,如下。

124bf523b2aab4ab1baf1f2e37f7d4d7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值