Java工程讀取resources中資源文件路徑問題,jar中的文件無法讀取
問題描述
現象
作爲一個剛開始學習java的新人,很多東西都是摸着石頭過河,踩坑是常有的事。這不,今天我將maven管理的一個spring boot的WebAPP部署到服務器上,運行直接報錯!納尼!!!本地跑得好好的,一到服務器就出問題,關鍵是日誌文件中的日誌不全,無法馬上定位到問題。好吧,一步一步排除問題吧!
定位
是不是windows與linux的區別?不是,我在windows上跑了一下打包後的代碼,也出問題了,打包前沒問題,打包後出問題了,包有毒!然後我開放了日誌,一步一步調試(蛋疼啊),最終發現配置文件沒有加載,路徑出了問題。。。
前言
工程文件結構如下所示,目標是讀取resources/python/kafka_producer.py文件
1、本地運行讀取資源文件
採用getResource進行讀取:
URL urlPath = this.getClass().getResource("/python/kafka_producer.py");
String execStr = String.format("python %s", urlPath.getPath().substring(1));
它是在target文件中讀取,這時文件是我們熟悉的文件。正常讀取,運行。
2、讀取jar包中的文件信息
InputStream is=this.getClass().getResourceAsStream("/python/kafka_producer.py");
BufferedReader br1=new BufferedReader(new InputStreamReader(is));
String s1="";
while((s1=br1.readLine())!=null)
System.out.println(s1);
如果你需要運行腳本文件,這時是不能直接通過路徑獲取的,具體可以看博客點擊。你需要重新將流寫入文件中,在運行,當然,也可以打war包,不用jar包。如果讀取配置文件有一下兩種方式:
InputStream in = this.getClass().getResourceAsStream("/properties/basecom.properties");
Properties properties = new Properties();
properties.load(in);
properties.getProperty("property_name")
或者
InputStream xmlFile = this.getClass().getResourceAsStream("/jdbcType.xml");
Document document = xmlReader.read(xmlFile);
Element xmlRoot = document.getRootElement();
Element childElement = xmlRoot.element(dbType);
List<Element> childElements = childElement.elements();
for (Element child : childElements) {
}