javascript
SpringBoot项目打成jar包后,无法读取resources下的文件
最近在使用aspose將word轉(zhuǎn)PDF并進(jìn)行簽章打印,讀取憑證文件時(shí)遇到一個(gè)問題,憑證文件放在resources目錄下,Windows下可正常讀取,但是打成jar包部署到Linux服務(wù)器上卻取不到文件。由此問題引出以下思考:
在本地項(xiàng)目讀取文件時(shí)
this.getClass().getClassLoader().getResource("").getPath()+fileName
this.getClass().getResource("/filename").getPath()
都是可以成功的;
但是jar打包后上面方式讀取文件時(shí) 會(huì)變成 jar!filename 這樣的形式去讀取文件,這樣是讀取不到文件的;
可以使用class.getResourceAsStream("/filename") 以流的形式讀取文件,是可以讀取的到的;
private static boolean getLicense() {boolean result = false;try {ClassLoader loader = Thread.currentThread().getContextClassLoader();// 憑證文件CONFIG_PATH =null;//method one(Windows能讀到文件,Linux讀不到文件)URL url = loader.getResource("config/license.xml");String filePath = url.getPath();logger.info("test-path : " + filePath);//test--path : file:/var/qianyue/java/test/qianyue-test.jar!/BOOT-INF/classes!/config/license.xmlFile file = new File(filePath);logger.info("test file : " + file.exists());//windows:true,linux:falseInputStream inputStream1 = CONFIG_PATH == null ? new FileInputStream(file) : new FileInputStream(new File(CONFIG_PATH));//method two(Windows能取到文件流,Linux也能取到文件流)InputStream flagInputStream = loader.getResourceAsStream("config/license.xml");logger.info("test file : " + flagInputStream.available());//windows:1609,linux:1609InputStream inputStream2 = CONFIG_PATH == null ? flagInputStream : new FileInputStream(new File(CONFIG_PATH));//method three(Windows能取到文件流,Linux也能取到文件流)InputStream indexInputStream = loader.getResource("config/license.xml").openStream();//原理與loader.getResourceAsStream一樣logger.info("test file : " + indexInputStream.available());//windows:1609,linux:1609InputStream inputStream3 = CONFIG_PATH == null ? indexInputStream : new FileInputStream(new File(CONFIG_PATH));License aposeLic = new License();aposeLic.setLicense(inputStream3);result = true;} catch (Exception e) {e.printStackTrace();}return result;}擴(kuò)展:
class.getResource()不帶"/“時(shí)候是從當(dāng)前類所在包路徑去獲取資源
class.getResource()帶”/"時(shí)候是從classpath的根路徑獲取
class.getResource()本質(zhì)上也是調(diào)用了getClassLoader,只是封裝了一層方便了我們使用而已
getClassLoader().getResource("")不帶"/“時(shí)候是從classpath的根路徑獲取
getClassLoader().getResource(”/")路徑中無法帶有"/"
getResourceAsStream() 方法僅僅是獲取對應(yīng)路徑文件的輸入流,在路徑的用法上與getResource()一致
總結(jié)
以上是生活随笔為你收集整理的SpringBoot项目打成jar包后,无法读取resources下的文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMVC配置类WebMvcCo
- 下一篇: 心宽路自宽