好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

解决springboot项目找不到resources目录下的资源问题

springboot项目找不到resources目录下的资源

问题描述:

将老的mvc项目转为boot后找不到resources文件夹下的资源文件

原因:

war包采用的是tomcat部署,tomcat会对war包进行解压,以及目录的一些操作。而springboot使用jar包部署,服务器中是不存在相关目录的。

环境:

springboot 2.2.2RELAESE

主要的API:

?

1

2

ClassPathResource classPathResource = new ClassPathResource(filePath);

InputStream inputStream = classPathResource.getInputStream();

工具类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

import java.io.File;

import java.io.InputStream;

import org.apache测试数据mons.io.FileUtils;

import org.apache测试数据mons.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下的资源文件了

网上搜了很多文章,但试了后都不好使

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

开始时我配置文件中是这样写的:

?

1

2

3

#路径中注意首尾不要有空格

service.config-root= static /service/

service.config-name=AppConfig.json

程序代码读出后拼接:

?

1

2

3

4

5

6

7

8

9

10

11

@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:

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

?

1

2

3

#路径中注意首尾不要有空格

service.config-root= static \\tileservice\\

service.config-name=AppConfig.json

方案2:

使用"File.spearator"拼接路径

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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, .....

         }

     }

搞定!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/the_fool_/article/details/103769185

查看更多关于解决springboot项目找不到resources目录下的资源问题的详细内容...

  阅读:52次