現象
在java項目中使用類加載器獲取某個資源文件的地址,然後使用FileInputStream將文件讀取到流中進行解析文件,在本地開發中是可以的,但是部署到服務器上面就會造成 FileNotFoundException。
String path = HashMap.class.getClassLoader().getResource("license.xml").getPath();
InputStream file = new FileInputStream(path);
分析
通過日誌打印path的內容,發現path的路徑是可以獲取得到的,只不過獲取到的路徑是 xxx.jar!license.xml 這種格式的,然後通過查資料發現,這樣子的路徑格式是無法定位到文件資源的,所以會拋出異常。
結果
ClassLoader下面還有一個 getResourceAsStream 的方法,使用此方法可以直接將jar文件中的資源文件進行讀取,十分方便。
InputStream license = OfficeToPdfUtils.class.getClassLoader().getResourceAsStream("license.xml");