使用SpringBoot获取resources文件路径

目录
  • 获取resources文件路径
    • 背景
    • 解决方案
  • 获取resource下文件夹路径的坑
    • 前提是maven项目的pom文件里面配置了
    • 这是后来我修改后的正常打包情况

获取resources文件路径

背景

在SpringBoot项目中,需要获取resources文件的路径,网上找了好多文章都不行,后面还是结合官方文档实现了,这里记录下,我使用的版本是SpringBoot2.x版本

解决方案

1、获取resources文件夹路径

File directory = new File("xxx/xxx/src/main/resources");
String reportPath = directory.getCanonicalPath();

xxx为你的项目内包的名称,File只会找到项目最外层地址;

这里需要注意,不能在xxx前面加/,否则只会找到顶层地址

获取resource下文件夹路径的坑

现在有个需求是需要利用模板文件生成HTML 或者 PDF 文件,然后由于HTML 模板文件里面包含图片和字体,然后我就在resource 文件夹下新建了一个文件夹,然后又分类,也就是 resource 下面有个 upload文件夹,有个 templateFile 文件夹,然后才是模板文件。也就是说模板文件在resource下面两级目录里面,那么问题来了。用了各种办法,就是获取不到这个文件。。。。。。。。

前提是maven项目的pom文件里面配置了

maven打包包含这些模板文件:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.png</include>
                    <include>**/*.html</include>
                    <include>**/*.ttf</include>
                    <include>**/*.TTF</include>
                    <include>**/*.ttc</include>
                </includes>
                <!--是否替换资源中的属性-->
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

然后install后,可以在当前模块或者项目的 target 文件夹下可以看到我们的模板文件。

这是后来我修改后的正常打包情况

其中代码里面,用了好评率最高的这个 ClassPathResource

import org.springframework.core.io;
Resource resource = new ClassPathResource("upload/templateFile");
log.info("contextPath:{}", resource.getURL());

这时候,按照理想情况,应该就是可以打印出来 templateFile 这个文件夹所在的绝对路径了。如果这个文件夹存在resource下面,是可以拿到这个文件夹的绝对路径的。

事实确是空的。。。。。就很神奇,刚开始以为。是不是因为跟别人的项目不一样,才导致的这个问题呢。

后面踩坑了半天,发现,是不是路径太深了,把往前提一层呢,就试下把 templateFile 直接放到 resources 下面,再次尝试,发现上面日志不再是空的了,可以正常取到模板文件所在的绝对路径了。这点windows和Linux都是可以的。

然后看似问题解决了,但是由于我这边部署使用docker镜像部署的,获取模板文件和生成文件也是正常的,但是由于生成的HTML文件用到了各种logo图片文件,然后生成的文件所在位置也挂载到宿主机上了,在容器内部查看生成的文件是正常的,但是到了宿主机上,生成的HTML文件里面的图片就不显示了。

期间尝试了使用文件服务器上的图片,是可以正常显示的,但是由于文件服务器跟外网不通,所以生成的文件,放到别的地方,图片就不显示了。

最后还是采用最笨的方法,将容器内部的某个路径挂载到宿主机的同名路径上,在宿主机的文件夹下存放固定的模板文件和需要用到的图片,路径硬编码写死到程序里面,也是可以正常生成文件和回显的。

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

(0)

相关推荐

  • 解决@springboottest注解无法加载src/main/resources目录下文件

    目录 结论 环境及问题描述 问题分析 1.首先com.xx.xxx.service.SsoService该类存在 2.再看下pom文件的配置 3.这个类是在src/main/resources目录下的资源文件里配置 Springboot微服务框架是目前越来越流行的框架,省去了很多繁琐的xml配置.最近新启了个项目,采用SpringBoot框架从头搭建,中间也遇到过各种坑,现在先描述一下 Junit4单元测试之坑吧. 结论 @SpringBootTest注解,只会加载test路径下的资源文件(即x

  • springboot项目获取resources相对路径的方法

    springboot文件上传保存到resources里,用 System.getProperty("user.dir");参数即可获得项目相对路径.(ps:不知道是不是springboot内嵌tomcat容器的原因,用网上的request.getServletContext().getRealPath("/")方法获得的路径不是项目路径,而是c盘下一个tomcat目录路径) 保存成功图: 到此这篇关于springboot项目获取resources相对路径的方法 的文

  • Springboot 项目读取Resources目录下的文件(推荐)

    需求描述:企业开发过程中,经常需要将一些静态文本数据放到Resources目录下,项目启动时或者程序运行中,需要读取这些文件. 读取Resources目录下文件的方法 /** * @Description: 读取resources 目录下的文件 * @Author: ljj * @CreateDate: 2020/11/3 17:20 * @UpdateUser: * @UpdateDate: * @UpdateReakem * @param filePath * @Return: java.l

  • 解决springboot项目找不到resources目录下的资源问题

    springboot项目找不到resources目录下的资源 问题描述: 将老的mvc项目转为boot后找不到resources文件夹下的资源文件 原因: war包采用的是tomcat部署,tomcat会对war包进行解压,以及目录的一些操作.而springboot使用jar包部署,服务器中是不存在相关目录的. 环境: springboot 2.2.2RELAESE 主要的API: ClassPathResource classPathResource = new ClassPathResour

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

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

  • 使用SpringBoot获取resources文件路径

    目录 获取resources文件路径 背景 解决方案 获取resource下文件夹路径的坑 前提是maven项目的pom文件里面配置了 这是后来我修改后的正常打包情况 获取resources文件路径 背景 在SpringBoot项目中,需要获取resources文件的路径,网上找了好多文章都不行,后面还是结合官方文档实现了,这里记录下,我使用的版本是SpringBoot2.x版本 解决方案 1.获取resources文件夹路径 File directory = new File("xxx/xxx

  • python获取当前文件路径以及父文件路径的方法

    #当前文件的路径 pwd = os.getcwd() #当前文件的父路径 father_path=os.path.abspath(os.path.dirname(pwd)+os.path.sep+".") #当前文件的前两级目录 grader_father=os.path.abspath(os.path.dirname(pwd)+os.path.sep+"..") 追加部分代码实例 def TestPrtPwd(self): print("获取当前文件路径

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

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

  • springboot中生成文件路径的问题及解决方法

    目录 springboot生成文件路径 举例 springboot创建错误(路径) 解决 springboot生成文件路径 在进行 springboot 项目开发以及打包为 jar 包发布时, 可能会有两种情况下生成文件路径不一致的问题, 有一种获取路径的方法可以使两种环境下都可以正确获取到项目或jar包的根目录 举例 String root = System.getProperty("user.dir"); String path = root +"\\out.txt&qu

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

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

  • C#中的文件路径获取函数和文件名字获取函数小结

    1. 获取绝对文件路径 复制代码 代码如下: System.IO.Path.GetFullPath(string path) string fileName = "myfile.ext"; string path1 = @"mydir"; string path2 = @"\mydir"; string fullPath; fullPath = Path.GetFullPath(path1); fullPath = Path.GetFullPat

  • Python如何获取文件路径/目录

    一.获取文件路径实现 1.1 获取当前文件路径 import os current_file_path = __file__ print(f"current_file_path: {current_file_path}") __file__变量其实有个问题,当文件被是被调用文件时__file__总是文件的绝对路径:但当文件是直接被执行的文件时,__file__并不总是文件的绝对路径,而是你执行该文件时给python传的路径.比如你是python xxx/yyy.py形式执行的,那么此时

  • C#获取应用程序路径或Web页面目录路径

    一.Winform获取本程序的路径 1.获取当前目录 返回最后不带“\”的目录:如D:\Winform\bin\Debug System.Windows.Forms.Application.StartupPath; System.Environment.CurrentDirectory; System.IO.Directory.GetCurrentDirectory(); 返回最后带“\”的目录(AppDomain应用程序域):如D:\Winform\bin\Debug\ System.AppD

  • Java实现读取resources目录下的文件路径的九种方式

    目录 前情提要 方式一 方式二 方式三 方式四(重要) 方式五(重要) 方式六(重要) 方式七 方式八 方式九 前情提要 本文中提供了九种方式获取resources目录下文件的方式.其中打印文件的方法如下:     /**      * 根据文件路径读取文件内容      *      * @param fileInPath      * @throws IOException      */     public static void getFileContent(Object fileIn

随机推荐