SpringBoot获取resources 目录下的文件的方式

2023-11-17

SpringBoot获取resources 目录下的文件的方式

在Spring Boot项目中,读取resources目录下文件的方式是非常常见的操作。为了确保项目的稳定性和可靠性,我们需要采取一种高效的方法来获取这些文件。因此,在本文中,我们将会探讨如何通读取resources目录下的文件,以及如何在读取过程中避免潜在的问题。下面我们就一起来看看有哪些方法吧!
1、ClassLoader.getResourceAsStream()

可以使用类加载器来获取资源文件的输入流。该方法接受一个资源文件路径参数,返回一个 InputStream 对象。

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("xiaozi.txt");

该方法返回的资源文件路径是相对于类加载器的根路径。即程序编译后的classes文件夹所在目录,如需要加载其他目录中,需要在前面添加目录结构(如:static/xiaozi.txt)。注:static前面不能添加“/”。

2、Class.getResourceAsStream()可以使用 Class 类的 getResourceAsStream() 方法来读取资源文件。该方法接受一个资源文件路径参数,返回一个 InputStream 对象。

InputStream inputStream = this.getClass().getResourceAsStream("/xiaozi.txt");


该方法返回的资源文件路径是相对于当前类的路径。因此,对于 resources 目录下的文件,需要在文件名前加上 "/" 前缀。例如: "/xiaozi.txt"。
3、ResourceLoader
使用 Spring 的 ResourceLoader 接口来加载资源文件。ResourceLoader 接口有一个 getResource() 方法,接受一个资源文件路径参数,返回一个 Resource 对象。

@Autowired
private ResourceLoader resourceLoader;

Resource resource = resourceLoader.getResource("classpath:xiaozi.txt");


4、ResourceUtils
ResourceUtils 是 Spring 提供的一个工具类,其底层使用的也是类加载器的原理实现的。可以使用 ResourceUtils.getFile() 方法来获取文件对象。后续可以将文件转化为流文件进行读取。

File file = ResourceUtils.getFile("classpath:xiaozi.txt");


需要注意的是,该方法只适用于本地文件系统和 JAR 文件。对于 WAR 文件或者其他类型的文件,该方法可能无法正常工作。
5、ApplicationContext可以使用 ApplicationContext 的 getResource() 方法来加载资源文件。该方法接受一个资源文件路径参数,返回一个 Resource 对象。

@Autowired
private ApplicationContext applicationContext;
Resource resource = applicationContext.getResource("classpath:xiaozi.txt");


6、File
可以使用 File 类来读取资源文件。需要提供完整的文件路径。后续可以将文件转化为流文件进行读取。

File file = new File("src/main/resources/xiaozi.txt");


7、Paths 和 Files
需要提供完整的文件路径。

Path path = Paths.get("src/main/resources/xiaozi.txt");
InputStream inputStream = Files.newInputStream(path);


8、ClassPathResource
可以使用 Spring 提供的 ClassPathResource 类来读取资源文件。该方法需要提供资源文件的相对路径。

ClassPathResource resource = new ClassPathResource("xiaozi.txt");


需要注意的是,ClassPathResource 会在类路径下查找资源文件,因此不需要提供完整的文件路径。
推荐使用

  • ClassLoader.getResourceAsStream() :这是一种通用的方式,可以适用于大多数情况。

  • ResourceLoader :Spring 框架中,可以使用 ResourceLoader 接口来加载资源文件。这种方式适用于大多数 Spring Boot 项目。

  • ClassPathResource:如果只需要读取 resources 目录下的文件,可以使用。这种方式较为简单。

  • 结束语
  • 以上则为获取文件的几种方法。快来尝试一下吧!
  • 如果大家觉得文章内容不错,快去分享给更多小伙伴吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot获取resources 目录下的文件的方式 的相关文章

随机推荐

  • 因Redis分布式锁造成的P0级重大事故,整个项目组被扣了绩效......,请慎用

    作者 浪漫先生 出处 juejin im post 5f159cd8f265da22e425f71d 背景 我们项目中的抢购订单采用的是分布式锁来解决的 有一次 运营做了一个飞天茅台的抢购活动 库存 100 瓶 但是却超卖了 要知道 这个地
  • 在C++11通过SFINAE机制实现静态检查类成员是否存在并分情况处理,以及一种通用宏的实现

    目录 引入 目的 代码 测试 TIPS 引入 c 模板中 我们无法知道参数类是否具有某个成员 例如下面代码 我们希望下面的代码中能够打印t的成员变量a的值 然而当类型T不包含成员a时 调用下面的代码就会报错 template
  • iOS Push详述,了解一下?

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由WeTest质量开放平台团队发表于云 社区专栏 作者 陈裕发 腾讯系统测试工程师 商业转载请联系腾讯WeTest获得授权 非商业转载请注明出处 原文链接 http wetest
  • 安装eli5库的踩雷

    报错方法 在Anaconda Prompt中输入pip install eli5 conda install eli5指令 分别显示安装失败和未找到包 解决方法 在Anaconda Powershell Prompt中输入conda ins
  • 深度学习中的优化算法之RMSProp

    之前在https blog csdn net fengbingchun article details 124766283 中介绍过深度学习中的优化算法AdaGrad 这里介绍下深度学习的另一种优化算法RMSProp RMSProp全称为R
  • 【从0学习Solidity】2. 值类型详解

    Solidity极简入门 2 值类型 博主简介 不写代码没饭吃 一名全栈领域的创作者 专注于研究互联网产品的解决方案和技术 熟悉云原生 微服务架构 分享一些项目实战经验以及前沿技术的见解 关注我们的主页 探索全栈开发 期待与您一起在移动开发
  • el-date-picker默认展示最近七天以及设置可选日期选择最大跨度

    el date picker组件内容
  • uniapp 自定义手机顶部状态栏不生效问题

    想要的效果想淘宝一样 底色覆盖到手机顶部 找了两天都没找到原因 过程很艰苦 直接上结果吧 项目是后来接手的 最终原因出在这 immersed false gt 设置为 true 就可以了 沉浸式样式
  • Linux 内核开发学习

    Linux 内核 Linux 内核官网 传送门 Linux 内核源码下载 传送门 1 内核空间 现在来说一下内核空间以及用户空间 这是学习linux内核最基本的两个概念了 如果连这都不懂 那就好好学吧 我们先从这张图入手 32位操作系统的最
  • 华为OD机试 - 增强的strstr(Python)

    题目描述 C 语言有一个库函数 char strstr const char haystack const char needle 实现在字符串 haystack 中查找第一次出现字符串 needle 的位置 如果未找到则返回 null 现
  • 锐星服务器怎么上传文件,协议转换器仪表远程配置方法专利_专利申请于2019-06-06_专利查询 - 天眼查...

    1 一种协议转换器仪表远程配置方法 其特征在于 包括以下步骤 步骤1 在平台端开发一个基于页面配置的配置程序 为指定的CAN仪表协议提供配置工具 输出配置文件 该配置文件是由版本信息 报文CAN ID配置语句 车载机使用数据项ID配置语句
  • 【干货】--手把手教你完成文本情感分类

    作者 刘顺祥 个人微信公众号 每天进步一点点2015 前言 2017年12月9日 参加了天善组织的线下沙龙活动 在沙龙中自己分享了如何借助于R语言完成情感分析的案例 考虑的其他网友没能够参与到活动现场 这里通过微信公众号作一个简单的分享 在
  • 【Angular中的HTTP请求】- JSONP 详解

    JSONP JSON with Padding 是JSON的一种 使用模式 可用于解决主流浏览器的跨域数据访问的问题 基于XMLHttpRequest的数据请求会受到同源策略限制 而 JSONP 以
  • 为什么离不开 Stackoverflow

    作为一名程序员 如果没有听过 Stackoverflow 那么你最好去面壁思过一下 程序员最需要阅读的一本编程书籍 其实编程书留下这本就够了 那些还没有读过这本书的程序员 是时候买一本了 如果还在犹豫 那么先看下这篇文章 看看为什么离不开
  • linux创建链接命令

    1 软链接 符号链接 1 软链接文件有类似于Windows的快捷方式 2 在符号连接中 文件实际上是一个文本文件 其中包含的有另一文件的位置信息 3 它只会在你选定的位置上生成一个文件的镜像 不会占用磁盘空间 linux创建链接软命令 具体
  • C语言调用C++函数

    前阵子被问及一个在C中如何调用C 函数的问题 当时简单回答是将函数用extern C 声明 当被问及如何将类内成员函数声明时 一时语塞 后来网上查了下 网上有一翻译C 之父的文章可以作为解答 遂拿来Mark一下 将 C 函数声明为 exte
  • JS 5种遍历对象的方式

    From https blog csdn net qq 53225741 article details 127073295 我根据阮老师的 ES6标准入门 学习并总结了七种遍历对象的方法 我会将分别介绍这七种方法并进行详细的区分 并将从属
  • Linux Ubuntu 能PING IP但不能PING主机域名的解决方法

    vi etc nsswitch conf hosts files dns networks files 改成 hosts files dns wins networks files 如果不一样的话 就在hosts 原来那行后面加个wins
  • Vue2转Vue3快速上手第一篇(共两篇)

    Vue3 v2 v3的学习成本不高 只要有v2基础 基本可以上手vue3 一 setup语法 setup中不能访问v2的配置比如data methods等 二 ref响应数据 使用ref可以创建一个对象 可以是基本类型 也可以是对象 例如
  • SpringBoot获取resources 目录下的文件的方式

    SpringBoot获取resources 目录下的文件的方式在Spring Boot项目中 读取resources目录下文件的方式是非常常见的操作 为了确保项目的稳定性和可靠性 我们需要采取一种高效的方法来获取这些文件 因此 在本文中 我