1. 今天晚上寫了一個程序,基於Spring boot的一個小網站,發現使用FileUtils.class.getResource(path)來獲取jar包中的資源文件並不能成功,其路徑很奇怪
file:/Users/lonecloud/Documents/ideaCode/git/export/target/export-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/temp/temp.xls
查閱資料后,並且查看jar包中的資源文件發現有!還有classes!這樣的文字,超級奇怪。后面找到一個折中的方法解決了該問題
public static File getJarResourceFile(String path, String fileName){ //獲取容器資源解析器 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { //獲取所有匹配的文件 Resource[] resources = resolver.getResources(path + fileName); if (resources.length > 1) { //獲得文件流,因為在jar文件中,不能直接通過文件資源路徑拿到文件,但是可以在jar包中拿到文件流 InputStream stream = resources[0].getInputStream(); if (logger.isInfoEnabled()) { logger.info("讀取的文件流 [" + stream + "]"); } String targetFilePath = System.getProperty("user.home") + File.separator + resources[0].getFilename(); if (logger.isInfoEnabled()) { logger.info("放置位置 [" + targetFilePath + "]"); } File ttfFile = new File(targetFilePath); org.apache.commons.io.FileUtils.copyInputStreamToFile(stream, ttfFile); return ttfFile; } } catch (IOException e) { if (logger.isWarnEnabled()) { logger.warn("讀取文件流失敗,寫入本地庫失敗! " + e); } } throw new RuntimeException("未找到文件"); }