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

 更新时间:2021年07月03日 16:00:49   作者:WoddenFish  
这篇文章主要介绍了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包底下路径无法访问的问题。

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

相关文章

  • 不同方式遍历Map集合(全)

    不同方式遍历Map集合(全)

    大家都知道Map是一种以键值对的形式存在的集合,其中每个键映射到一个值,下面把Map遍历集合总结了一下给大家分享下,需要的朋友可以参考下
    2015-07-07
  • springboot 配置文件配置项前缀为0的数字特殊处理方式

    springboot 配置文件配置项前缀为0的数字特殊处理方式

    这篇文章主要介绍了springboot 配置文件配置项前缀为0的数字特殊处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringMVC @RequestBody出现400 Bad Request的解决

    SpringMVC @RequestBody出现400 Bad Request的解决

    这篇文章主要介绍了SpringMVC @RequestBody出现400 Bad Request的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Mybatis Log控制台如何输出打印SQL语句

    Mybatis Log控制台如何输出打印SQL语句

    这篇文章主要介绍了Mybatis Log控制台如何输出打印SQL语句,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 类似微信说话功能的录音处理代码分享

    类似微信说话功能的录音处理代码分享

    这篇文章主要介绍了类似微信中说话功能的录音处理代码,需要大家自己加UI界面,大家参考使用吧
    2014-01-01
  • MybatisPlus如何自动生成映射文件

    MybatisPlus如何自动生成映射文件

    这篇文章主要介绍了MybatisPlus如何自动生成映射文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 聊一聊Java反射

    聊一聊Java反射

    工作中哪些地方比较容易用到反射,这篇文章就为大家介绍了工作中常用到的Java反射,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Java中LocalDateTime的具体用法

    Java中LocalDateTime的具体用法

    本文主要介绍了Java中LocalDateTime的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Springboot中PropertySource的结构与加载过程逐步分析讲解

    Springboot中PropertySource的结构与加载过程逐步分析讲解

    本文重点讲解一下Spring中@PropertySource注解的使用,PropertySource主要是对属性源的抽象,包含属性源名称name和属性源内容对象source。其方法主要是对这两个字段进行操作
    2023-01-01
  • SpringBoot3实现上传图片并返回路径让前端显示图片

    SpringBoot3实现上传图片并返回路径让前端显示图片

    这篇文章主要介绍了SpringBoot3实现上传图片并返回路径让前端显示图片,文中通过图文和代码讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-12-12

最新评论