溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決springboot項目找不到resources目錄下的資源問題

發(fā)布時間:2021-08-11 14:50:06 來源:億速云 閱讀:955 作者:小新 欄目:開發(fā)技術

小編給大家分享一下如何解決springboot項目找不到resources目錄下的資源問題,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

springboot項目找不到resources目錄下的資源

問題描述:

將老的mvc項目轉為boot后找不到resources文件夾下的資源文件

原因:

war包采用的是tomcat部署,tomcat會對war包進行解壓,以及目錄的一些操作。而springboot使用jar包部署,服務器中是不存在相關目錄的。

環(huán)境:

springboot 2.2.2RELAESE

主要的API:

ClassPathResource classPathResource = new ClassPathResource(filePath);
InputStream inputStream = classPathResource.getInputStream();

工具類

import java.io.File;
import java.io.InputStream; 
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.ClassPathResource; 
 
public class FileUtil { 
    public File getResourceFile(String filePath) throws Exception{
 
        try {
            ClassPathResource classPathResource = new ClassPathResource(filePath);
 
            InputStream inputStream = classPathResource.getInputStream();
            //生成目標文件
            File somethingFile = File.createTempFile("DailyReportTemplate", ".xls");
            try {
                FileUtils.copyInputStreamToFile(inputStream, somethingFile);
            } finally {
                IOUtils.closeQuietly(inputStream);
            }
 
            return somethingFile;
        } catch (Exception e) {
            throw new Exception(e);
        }
    } 
}

運行jar文件時,ClassPathResource無法讀取到資源文件的問題

問題場景:

在idea中運行,一切正常,資源文件都可以訪問到,但打成jar包后,使用java -jar的形式去啟動,就訪問不到resource下的資源文件了

網(wǎng)上搜了很多文章,但試了后都不好使

我的路徑是配置在properties文件中,然后讀取配置文件中的值,然后拼接文件路徑,再使用ClassPathResource去讀取的

開始時我配置文件中是這樣寫的:

#路徑中注意首尾不要有空格
service.config-root=static/service/
service.config-name=AppConfig.json

程序代碼讀出后拼接:

@Value("${service.config-root}")
private String configRoot; 
@Value("${service.config-name}")
private String configName;
 
.....省略無關code..... 
 
public String getPath(){
    String configPath = this.configRoot + this.configName;
    return configPath;
}

但運行jar后,直接FileNotFoundException了

解決:

方案1:

主要是斜杠"\"和反斜杠"/"的問題,配置文件修改如下:

#路徑中注意首尾不要有空格
service.config-root=static\\tileservice\\
service.config-name=AppConfig.json
方案2:

使用"File.spearator"拼接路徑

service.config-root=static
service.config-name=AppConfig.json
@Value("${service.config-root}")
private String configRoot; 
@Value("${service.config-name}")
private String configName;
 
.....省略無關code.....
 
 public static <T> T readJsonFromClassPath(Type type) throws IOException {
        //這里使用File.spearator拼接
        ClassPathResource resource = new ClassPathResource(this.configRoot + File.spearator  + this.configName);
        if (resource.exists()) {
            return JSON.parseObject(resource.getInputStream(), StandardCharsets.UTF_8, type, .....
        }
    }

看完了這篇文章,相信你對“如何解決springboot項目找不到resources目錄下的資源問題”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI