springboot读取文件,打成jar包后访问不到的解决
作者:WoddenFish 发布时间:2023-07-14 13:56:35
标签:springboot,读取文件,jar,访问
springboot读取文件,打成jar包后访问不到
最新开发出现一种情况,springboot打成jar包后读取不到文件,原因是打包之后,文件的虚拟路径是无效的,只能通过流去读取。
文件在resources下
public void test() {
List<String> names = new ArrayList<>();
InputStreamReader read = null;
try {
ClassPathResource resource = new ClassPathResource("name.txt");
InputStream inputStream = resource.getInputStream();
read = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(read);
String txt = null;
while ((txt = bufferedReader.readLine()) != null) {
if (StringUtils.isNotBlank(txt)) {
names.add(txt);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (read != null) {
try {
read.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
springboot打jar包后台无法访问静态文件夹
1.ResourceUtils
平常我们写spring boot 项目的时候偶尔会在后台用到classpath 底下的文件,一般我们都是这样写的
File file = ResourceUtils.getFile("classpath:static/image/image");
这样情况下本来是没啥问题的。但是用 打jar 包 运行以后就会找不到这个文件。
Resource下的文件是存在于jar这个文件里面,在磁盘上是没有真实路径存在的,它其实是位于jar内部的一个路径。所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。
对于这种情况。有时候会把项目文档放到项目外边,但是这样很容易把这些东西误删除掉。
2.ClassPathResource
ClassPathResource cpr = new ClassPathResource("static/image/image/kpg");
InputStream in = cpr.getInputStream();
3. ResourceLoader
public class ResourceRenderer {
public static InputStream resourceLoader(String fileFullPath) throws IOException {
ResourceLoader resourceLoader = new DefaultResourceLoader();
return resourceLoader.getResource(fileFullPath).getInputStream();
}
}
用法
InputStream in = ResourceRenderer.resourceLoader("classpath:static/image/image");
这样就完美的解决了jar包底下路径无法访问的问题。
来源:https://blog.csdn.net/WoddenFish/article/details/86161918
0
投稿
猜你喜欢
- 方式一:if语句控制// 例如:Column( mainAxisAlig
- feign传输List的坑无法直接传输List错误方法1@RequestMapping(value = "/stat/mercha
- 示例 1 :使用搜索表单创建全屏模式我们要构建的小应用程序有一个应用程序栏,右侧有一个搜索按钮。按下此按钮时,将出现一个全屏模式对话框。它不
- 各位亲们可以尝试以下代码:注:这里我就只有一个html标签对来说明问题了,首部之类的东西,自己添加。<html> &n
- 概述:App几乎都离不开与服务器的交互,本文主要讲解了flutter网络请求三种方式 flutter自带的HttpClient、 第三方库h
- 起源flutter作为一个跨平台的框架,在绘制上体现出了它跨平台的良好性能.那么,它是如何从runApp()后 绘制上屏的呢?本文将与你一起
- @RequestMapping注解注意点类上加没加@RequestMappin注解区别1.如果类上加了 @RequestMappin注解,那
- mport java.text.DecimalFormat; DecimalFormat &nb
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- Navigator 的 push 和 pop方法Navigator 导航器的 push 和 pop 方法可以携带参数在页面间传递,其他变形的
- 问题:在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码。原因其实很简单,就是系统的编码和程序的编码采用了不
- 本文实例为大家分享了iOS新浪微博分享功能的具体代码,供大家参考,具体内容如下做新浪分享 需先去http://open.weibo.com/
- 有人问我,怎么判断一个点是不是在多边形内,本来想着把这个多边形分成一个又一个三角形,如图, 然后判断这个点是不是在某个三角形中,如
- 1、右值1.1 简介首先区分一下左右值:左值是指存储在内存中、有明确存储地址(可取地址)的数据;右值是指可以提供数据值的数据(不可取地址)如
- Step1: 安装JDK并配置环境变量;Step2: 安装Gradle进入点击打开链接官网首页点击install gra
- requestFoucs();无效。requestFoucsFromTouch();无效。webview.setTouchListener;
- C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件
- 定义: SharedPreferences
- 1.ArrayList 是基数组结构的,需要连续的内存空间从构造函数可以看出,ArrayList内部用一个Object数组来保存数据。对于无
- 本文实例为大家分享了OpenCV实现直线检测并消除的具体代码,供大家参考,具体内容如下很简单,代码如下#include<iostrea