1. 程式人生 > >java:在分散式專案中讀取專案根目錄下的檔案(jar包也可用)

java:在分散式專案中讀取專案根目錄下的檔案(jar包也可用)

String path = Class.class.getClass().getResource("/").getPath();
String configPath=path+fileName;
configPath = java.net.URLDecoder.decode(configPath,"utf-8");
File file = new File(configPath);


Class.class.getClass().getResource("/").getPath();是獲得根目錄的絕對路徑

如下圖


我們知道classes是編譯後文件的存放地址,classes目錄下就是根目錄

我的啟動專案為jl-titan-build,檔案存放在該專案的resources目錄下

程式碼所在專案為jl-titan-core,如果用main方法跑的話,結果和上圖不同

得到的是"/D:/Eclipse/bjhy_ljyz/titan-parent/jl-titan-core/target/classes"

也就是說 從哪個專案啟動的 得到的結果就是啟動專案的根目錄

補充-----------------------------------------------

把專案打包為war包,通過Class.class.getClass().getResource("/").getPath()方法 可以在tomcat中執行,但是如果是把專案打包為jar包執行則會報空指標錯,原因是Class.class.getClass().getResource("/")為null,之所以這樣是因為把專案打包為jar包後 classes檔案在jar中 相當於在一個壓縮包中 而不是在具體的資料夾中 所以是獲取不到檔案的絕對路徑的

解決辦法是使用Class.class.getClass().getResourceAsStream("/"+fileName);該方法以相對路徑的方式獲取calsses下的檔案,傳入的引數為檔名,返回的是檔案流而不是表示絕對路徑的字串。