springboot读取文件,打成jar包后访问不到的解决

作者:WoddenFish 时间:2023-07-14 13:56:35 

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

标签:springboot,读取文件,jar,访问
0
投稿

猜你喜欢

  • 使用@pathvariable与@requestparam碰到的一些问题及解决

    2023-11-27 16:30:34
  • Android手势密码的实现

    2023-03-09 09:23:01
  • 详解Android获取所有依赖库的几种方式

    2023-12-13 05:41:51
  • Android远程服务编写和调用教程

    2022-06-14 18:10:45
  • C#设置与获取环境变量的方法详解

    2021-09-03 20:55:29
  • c#图片缩放图片剪切功能实现(等比缩放)

    2022-08-17 04:46:13
  • SpringBoot2.3新特性优雅停机详解

    2023-11-28 07:59:43
  • Java通俗易懂系列设计模式之建造者模式

    2022-11-01 23:27:24
  • 详解Java中类的加载与其初始化

    2023-06-21 04:56:45
  • C# Assembly.Load案例详解

    2021-11-06 03:20:33
  • Java之System.getProperty()的作用及使用说明

    2023-05-18 12:34:51
  • 一篇文章弄懂Java和Kotlin的泛型难点

    2022-11-19 11:37:19
  • C#精确计算年龄的方法分析

    2021-06-13 14:06:36
  • Java实现简单的迷宫游戏详解

    2022-11-22 05:00:52
  • Java 十大排序算法之插入排序刨析

    2021-12-07 02:48:54
  • Java泛型定义与用法实例详解

    2023-11-25 11:50:28
  • 改进c# 代码的五个技巧(二)

    2023-01-09 08:57:56
  • Java中的final关键字使用方式

    2023-01-16 15:04:25
  • elasticsearch节点的transport请求发送处理分析

    2022-04-05 22:38:08
  • WPF自定义控件的实现

    2021-07-06 02:34:11
  • asp之家 软件编程 m.aspxhome.com