解决springboot项⽬不到resources⽬录下的资源问题springboot项⽬不到resources⽬录下的资源
问题描述:
将⽼的mvc项⽬转为boot后不到resources⽂件夹下的资源⽂件
原因:
war包采⽤的是tomcat部署,tomcat会对war包进⾏解压,以及⽬录的⼀些操作。⽽springboot使⽤jar包部署,服务器中是不存在相关⽬录的。
环境:
springboot 2.2.2RELAESE
主要的API:
ClassPathResource classPathResource = new ClassPathResource(filePath);
InputStream inputStream = InputStream();
⼯具类
import java.io.File;
import java.io.InputStream;
import org.apachemons.io.FileUtils;
import org.apachemons.io.IOUtils;
import io.ClassPathResource;
public class FileUtil {
public File getResourceFile(String filePath) throws Exception{
try {
ClassPathResource classPathResource = new ClassPathResource(filePath);
InputStream inputStream = InputStream();
//⽣成⽬标⽂件
File somethingFile = ateTempFile("DailyReportTemplate", ".xls");
try {
} finally {
IOUtils.closeQuietly(inputStream);
}
return somethingFile;
} catch (Exception e) {
throw new Exception(e);
}
}
}
运⾏jar⽂件时,ClassPathResource⽆法读取到资源⽂件的问题
问题场景:
在idea中运⾏,⼀切正常,资源⽂件都可以访问到,但打成jar包后,使⽤java -jar的形式去启动,就访问不到resource下的资源⽂件了
⽹上搜了很多⽂章,但试了后都不好使
我的路径是配置在properties⽂件中,然后读取配置⽂件中的值,然后拼接⽂件路径,再使⽤ClassPathResource去读取的
开始时我配置⽂件中是这样写的:
#路径中注意⾸尾不要有空格
程序代码读出后拼接:
@Value("${fig-root}")
private String configRoot;
@Value("${fig-name}")
private String configName;
.....省略⽆关
public String getPath(){
String configPath = figRoot + figName;
return configPath;
}
但运⾏jar后,直接FileNotFoundException了
解决:
⽅案1:
主要是斜杠"\"和反斜杠"/"的问题,配置⽂件修改如下:
#路径中注意⾸尾不要有空格
⽅案2:
spring怎么读取properties使⽤"File.spearator"拼接路径
@Value("${fig-root}")
private String configRoot;
@Value("${fig-name}")
private String configName;
.....省略⽆关
public static <T> T readJsonFromClassPath(Type type) throws IOException {
//这⾥使⽤File.spearator拼接
ClassPathResource resource = new figRoot + File.spearator + figName); if (ists()) {
return JSON.InputStream(), StandardCharsets.UTF_8, type, .....
}
}
搞定!
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论