100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 关于SpringBoot项目通过jar包启动之后无法读取项目根路径静态资源

关于SpringBoot项目通过jar包启动之后无法读取项目根路径静态资源

时间:2023-06-05 17:44:16

相关推荐

关于SpringBoot项目通过jar包启动之后无法读取项目根路径静态资源

前言:这个是昨天晚上在部署一个项目的时候发现的,在此记录一下

关于SpringBoot项目通过jar包启动之后无法读取项目根路径静态资源

问题描述

在部署了一个项目之后,打开项目页面进行测试,发现有一个查询页面查询失败了,自动跳转到错误页面,我看了看日志,发现是一个文件读取失败了,如下图:

报错信息

被读取文件所在目录

文件读取部分的代码

public String readFileContent() {File file = new File("src/main/resources/static/ticket/station_name.txt");BufferedReader reader = null;StringBuffer sbf = new StringBuffer();try {reader = new BufferedReader(new FileReader(file));String tempStr;while ((tempStr = reader.readLine()) != null) {sbf.append(tempStr);}reader.close();return sbf.toString();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {e1.printStackTrace();}}}return sbf.toString();}

当时我挺懵批的,因为这个文件在本地测试的时候还是能读取到的,为什么到了服务器就找不到了呢???

解决方法

我上网查阅了一番,发现使用 File 在服务器中来获取本地资源是存在问题的。

原因:

Resources 目录下的文件是存在于 xxx.jar 这个文件里面,在服务器磁盘上是没有真实路径存在的,它其实是位于jar内部的一个路径。

解决方法一(笨方法):

将待读取的文件上传到服务器相应目录下,将读取的文件路径改成服务器上面文件对应的路径。

解决方法二:

使用输入流,如下:

public String readFileContent() throws Exception{String filePath = "static/ticket/station_name.txt";InputStream inputStream = null;BufferedReader reader = null;StringBuffer sbf = new StringBuffer();//文件读取inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);reader = new BufferedReader(new InputStreamReader(inputStream));String tempStr;while ((tempStr = reader.readLine()) != null) {sbf.append(tempStr);}reader.close();return sbf.toString();}

public String readFileContent() throws Exception{String filePath = "static/ticket/station_name.txt";ClassPathResource resource = new ClassPathResource(filePath);InputStream inputStream = null;BufferedReader reader = null;StringBuffer sbf = new StringBuffer();//文件读取inputStream = resource.getInputStream();reader = new BufferedReader(new InputStreamReader(inputStream));String tempStr;while ((tempStr = reader.readLine()) != null) {sbf.append(tempStr);}reader.close();return sbf.toString();}

这里要注意的是,使用的路径是 resources 底下的路径。

PS:也可以到我的个人博客查看更多内容

个人博客地址:小关同学的博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。