springboot jar包執行中獲取資原始檔

lonecloud發表於2018-05-30

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("未找到檔案"); }

  

 

相關文章