SpringBoot部署到Linux读取resources下的文件及遇到的坑

下面看下SpringBoot工程在Linux上运行读取resources资源文件夹下的文件

背景

平时的业务开发中,我们通常会将一些固定不变的资源文件放到resources文件夹下,使用时通过相对路径获取文件,看是非常简单的一个功能
其中似乎也有一些小坑,例如获取到的文件内容乱码亦或者文件读取不到。

读取乱码

这个很简单哈,在maven插件中指定后续要获取的文件不进行编译,原样打进包内

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>sql</nonFilteredFileExtension>
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
            <nonFilteredFileExtension>xls</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

读取文件

这个是一个小坑,捣鼓了一两个小时才找到问题。。。。。绝望

先列出两个绝对不可行的,主要原因是再开发环境上是没问题的,跑生产跑不通

方法一:
File currentFolder = ResourceUtils.getFile("classpath:excelTemplate/model.xls");
方法二:
this.class.getResourceAsStream("excelTemplate/model.xls");

下面再说下能行的通的方法,不过也有一些坑。。。。。。这个坑纯属意外所致

方法一:
Resource resource = new ClassPathResource("excelTemplate/model.xls");
InputStream resourceAsStream = resource.getInputStream();

方法二:
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excelTemplate/model.xls");

这两种方法绝对是好使的,有些小伙伴估计在获取文件的时候也报错了,若也出现报错可以现在本地打开试一下,看文件是否存在损坏。

有图有真相绝对好使

不要误会程序确实是在Linux上跑的,为了验证所以用开发工具Remote远程调试方便截图

以上就是SpringBoot部署到Linux读取resources下的文件的详细内容,更多关于SpringBoot读取resources文件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Maven项目读取resources文件路径问题解决方案

    读取resources下文件的方法 网上有问答如下: 问: new FileInputStream("src/main/resources/all.properties") new FileInputStream("./src/main/resources/all.properties") 上面两个无法读取maven下资源文件目录下的文件嘛,总是提示找不到该路径,这么写错了嘛,但是我的其他maven可以读取 答: 要取编译后的路径,而不是你看到的src/main/r

  • maven工程如何读取resource目录下配置文件

    目录 maven工程读取resource目录下配置文件 maven配置resource,多个source目录 maven工程读取resource目录下配置文件 在maven工程中,我们会将配置文件放到src/main/resources下面,例如 我们需要确认resource 下的文件编译之后存放的位置. 它编译的路径直接位于classes下面,这个路径其实就是classPath的路径,所以,在resources 根目录下的配置文件其实就是 classPath的路径. public static

  • Maven项目中resources配置总结

    背景 通常Maven项目的文件目录结构如下: # Maven项目的标准目录结构 src main java #源文件 resources #资源文件 filters #资源过滤文件 config #配置文件 scripts #脚本文件 webapp #web应用文件 test java #测试源文件 resources #测试资源文件 filters #测试资源过滤文件 it #集成测试 assembly #assembly descriptors site #Site target gener

  • SpringBoot部署到Linux读取resources下的文件及遇到的坑

    下面看下SpringBoot工程在Linux上运行读取resources资源文件夹下的文件 背景 平时的业务开发中,我们通常会将一些固定不变的资源文件放到resources文件夹下,使用时通过相对路径获取文件,看是非常简单的一个功能 其中似乎也有一些小坑,例如获取到的文件内容乱码亦或者文件读取不到. 读取乱码 这个很简单哈,在maven插件中指定后续要获取的文件不进行编译,原样打进包内 <plugin> <groupId>org.apache.maven.plugins</g

  • SpringBoot部署到Linux读取resources下的文件

    SpringBoot工程在Linux上运行读取resources资源文件夹下的文件 背景 平时的业务开发中,我们通常会将一些固定不变的资源文件放到resources文件夹下,使用时通过相对路径获取文件,看是非常简单的一个功能 其中似乎也有一些小坑,例如获取到的文件内容乱码亦或者文件读取不到. 读取乱码 这个很简单哈,在maven插件中指定后续要获取的文件不进行编译,原样打进包内 <plugin> <groupId>org.apache.maven.plugins</group

  • java(包括springboot)读取resources下文件方式实现

    本文主要介绍了java(包括springboot)读取resources下文件方式实现,分享给大家,具体如下: 1.使用项目内路径读取,该路径只在开发工具中显示,类似:src/main/resources/resource.properties.只能在开发工具中使用,部署之后无法读取.(不通用) File file = new File("src/main/resources/resource.properties"); @Test public void testReadFile2(

  • springboot读取resources下文件的方式详解

    项目中很多时候需要读取自定义配置文件,本地开发工具怎么写都成功但是部署到服务其上就出现问题, 异常BOOT-INF/classes!/config.xml (文件名.目录名或卷标语法不正确.)路径中带有叹号之类的 了解了大概之后就是springboot打成jar是一个文件,也就是一个压缩包,没有办法读取压缩文件里的路径,因此要解决这个问题了解读取配置文件的原理,直接获取文件流就可以了. 1.使用项目内路径读取,只能在开发工具中使用,部署之后无法读取.(不通用) 类似:src/main/resou

  • 解决SpringBoot打成jar运行后无法读取resources里的文件问题

    开发一个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版文件放到 resources 下 在开发环境中通过下面方法能读取word_replace_tpl.docx文件,但是打成jar包在 linux下运行后无法找到文件了 File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "static/office_template/xxx.docx&q

  • PHP读取目录下所有文件的代码

    读取目录下所有文件的代码,可以不管文件名 复制代码 代码如下: <?php   $dir = "file"; // Open a known directory, and proceed to read its contents   if (is_dir($dir)) {      if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) {          if ($file!=".&qu

  • java递归读取目录下所有文件的方法

    java递归读取目录下的所有文件(包含子目录下的所有文件)大概思路如下:通过file.listFiles()方法获取目录下的所有文件(包含子目录下的所有文件),得到files[]数组,然后遍历得到的所有文件,通过isFile(文件)和isDirectory(文件夹)方法来判断读取的是文件还是文件夹,如果得到的是文件夹,就递归调用test()方法,如果得到的是文件,就将其加入fileList中,最后测试的时候遍历fileList下的所有文件,来验证读取数据的准确性. package com.cha

  • python 读取目录下csv文件并绘制曲线v111的方法

    实例如下: # -*- coding: utf-8 -*- """ Spyder Editor This temporary script file is located here: C:\Users\user\.spyder2\.temp.py """ """ Show how to modify the coordinate formatter to report the image "z"

  • nodejs 递归拷贝、读取目录下所有文件和目录

    先给大家介绍下nodejs 递归拷贝目录下所有文件和目录,具体代码如下所示: var fs=require('fs'); var copy=function(src,dst){ let paths = fs.readdirSync(src); //同步读取当前目录 paths.forEach(function(path){ var _src=src+'/'+path; var _dst=dst+'/'+path; fs.stat(_src,function(err,stats){ //stats

  • SpringBoot 如何读取classpath下的文件

    SpringBoot 读取classpath下文件 开发过程中,必不可少的需要读取文件,对于打包方式的不同,还会存在一些坑,比如以jar包方式部署时,文件都存在于jar包中,某些读取方式在开发工程中都可行,但是打包后,由于文件被保存在jar中,会导致读取失败. 这时就需要通过类加载器读取文件,类加载器可以读取jar包中的class类当然也可以读取jar包中的文件. // 方法1:获取文件或流 this.getClass().getResource("/")+fileName; this

随机推荐