Spring Boot 中使用 ResourceLoader 加载资源的完整示例

ResourceLoader 是 Spring 框架中用于加载资源的接口。它定义了一系列用于获取资源的方法,可以处理各种资源,包括类路径资源、文件系统资源、URL 资源等。

以下是 ResourceLoader 接口的主要方法:

  1. Resource getResource(String location)

    • 根据给定的资源位置字符串返回一个 Resource 对象。
    • 位置字符串可以是类路径、文件系统路径、URL 等形式。
  2. ClassLoader getClassLoader()

    • 返回与此资源加载器关联的类加载器。
    • 可以用于加载类路径下的资源。
  3. Resource[] getResources(String locationPattern)

    • 根据模式字符串返回一个资源数组。
    • 模式字符串支持通配符,比如 classpath*:/**/*.xml
  4. Class<?> resolveClassName(String className)

    • 根据类名解析成 Class 对象。
    • 这样可以方便地获取到类信息。

在 Spring 框架中,ResourceLoader 的常用实现类是 DefaultResourceLoader,它提供了对资源加载的默认实现。在大多数情况下,不需要手动实现这个接口,而是使用 Spring 框架中提供的资源加载机制。

在 Spring Boot 中,ResourceLoader 的默认实现是 ResourceLoader 接口的实现类 DefaultResourceLoader。Spring Boot 还提供了更高级的资源加载方式,例如使用 @Value 注解加载配置文件中的属性,或者使用 @PropertySource 注解加载外部配置文件。

要使用 ResourceLoader,可以将其注入类中,例如在 Spring Boot 的组件中:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;

@Component
public class MyResourceLoader {

    @Autowired
    private ResourceLoader resourceLoader;

    public void loadResource(String location) {
        Resource resource = resourceLoader.getResource(location);

        // 处理资源,例如读取文件内容
        // ...
    }
}

在上面的例子中,ResourceLoader 被注入到 MyResourceLoader 中,可以使用它来加载资源。
下面来一个完整的例子:

1、创建一个demo.txt用来测试

resources/demo.txt

这是一个测试文本第一行
这是一个测试文本第二行
这是一个测试文本第三行

2、定义资源加载解析组件

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;

import java.io.*;

@Component
public class MyResourceLoader {

    @Autowired
    private ResourceLoader resourceLoader;

    public String loadResource(String location) {
        // 获取资源
        Resource resource = resourceLoader.getResource(location);

        // 检查资源是否存在
        if (!resource.exists()) {
            System.out.println("该资源不存在!");
            return "该资源不存在!";
        }

        System.out.println("资源存在!");

        try (InputStream inputStream = resource.getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
             StringWriter writer = new StringWriter()) {

            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                // 添加换行符 :每次读取一行后都会添加一个换行符,确保了每行的结尾都有换行符。
                // 如果仍然没有效果,请确认文件本身是否包含换行符。
                writer.write(System.lineSeparator());
            }

            return writer.toString();
        } catch (IOException e) {
            System.err.println("读取资源错误: " + e.getMessage());
            return "读取资源错误: " + e.getMessage();
        }
    }
}

3、service

import com.lfsun.demolfsunstudyresourceloader.config.MyResourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ResourceService {

    @Autowired
    private MyResourceLoader resourceLoader;

    public String getMyResource(String fileName) {
        System.out.println("寻找资源:" + String.format("classpath:%s",fileName));
        return resourceLoader.loadResource(String.format("classpath:%s",fileName));
    }

}

4、controller

import com.lfsun.demolfsunstudyresourceloader.service.ResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/resource")
public class ResourceController {

    @Autowired
    private ResourceService resourceService;
    // http://localhost:8080/resource/demo.txt
    @GetMapping("/{fileName}")
    public String getMyResource(@PathVariable String fileName) {
        return resourceService.getMyResource(fileName);
    }
}

5、访问 http://localhost:8080/resource/demo.txt 即可

Edge:加了换行还是没效果…Google也是
在这里插入图片描述
Apifox 正常:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VSCode 运行java程序中文乱码

现象描述 java文件中包含中文&#xff0c;运行java程序后&#xff0c;乱码报错。 解决方法 原本运行指令为 cd "d:\programProjects\Java_proj\" ; if ($?) { javac Solution.java } ; if ($?) { java Solution } 需要添加 编码格式 -encoding utf8 cd &quo…

python数据处理作业6:随机生产一个服从正态分布长度为1000的数组,将这个数组划分为25个区间,画出数组的直方图和密度图

每日小语 我只有忘掉自己&#xff0c;才能津津有味地进行沉思和遐想。——卢梭 gpt代码 import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm# 随机生成一个服从正态分布的长度为1000的数组 data np.random.randn(1000)# 划分为25个区间 num_…

【Linux】U盘安装的cfg引导文件配置

isolinux.cfg文件 default vesamenu.c32 timeout 600display boot.msg# Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long …

什么是好用的HR人才测评?

对于HR来说&#xff0c;选用一个合适的测评工具&#xff0c;我想不外乎以下几点&#xff1a; 1、成本可控 不是所有的HR都能申请到足够的资金&#xff0c;去做专业的人才测评&#xff0c;尤其是中小企业&#xff0c;这可是一笔不小 的开支。即使是基层普通岗位的成本&#xf…

redis运维(十一) python操作redis

一 python操作redis ① 安装pyredis redis常见错误 说明&#xff1a;由于redis服务器是5.0.8的,为了避免出现问题,默认最高版本的即可 --> 适配 ② 操作流程 核心&#xff1a;获取redis数据库连接对象 ③ Python 字符串前面加u,r,b的含义 原因&#xff1a; 字符串在…

视频一键转码:批量转换MP4视频的技巧

随着数字媒体设备的普及&#xff0c;视频文件在生活中扮演着越来越重要的角色。而在处理视频文件时&#xff0c;有时需要将其转换为不同的格式以适应不同的需求。其中&#xff0c;MP4格式因其通用性和高质量而备受青睐。本文详解云炫AI智剪如何一键转码的技巧&#xff0c;帮助批…

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统&#xff0c;它可以与用户进行自由的对话&#xff0c;不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力&#xff0c;以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

msvcp140.dll是什么东西以及如何解决其文件缺失问题

当我们在使用Windows电脑的过程中&#xff0c;有时候可能会遇到一些由于系统文件缺失或者损坏而导致的问题。其中&#xff0c;"msvcp140.dll缺失"就是一种常见的错误提示。msvcp140.dll究竟是什么&#xff1f;为什么它会缺失&#xff1f;又该如何解决这个问题呢&…

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中&#xff0c;dfs2是一个一个小格格的网格面的时间序列文件&#xff0c;dfs1是一条由多个点组成的线的时间序列文件。 如下两图&#xff1a; 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …

PaddleClas学习2——使用PPLCNet模型对车辆朝向进行识别(python)

使用PPLCNet模型对车辆朝向进行识别 1. 配置PaddlePaddle,PaddleClas环境2. 准备数据2.1 标注数据格式2.2 标注数据3. 模型训练3.1 修改配置文件3.2 训练、评估4 模型预测1. 配置PaddlePaddle,PaddleClas环境 安装:请先参考文档 环境准备 配置 PaddleClas 运行环境。 2. 准…

Unity Text文本首行缩进两个字符的方法

Text文本首行缩进两个字符的方法比较简单。通过代码把"\u3000\u3000"加到文本字符串前面即可。 参考如下代码&#xff1a; TMPtext1.text "\u3000\u3000" "这是一段有首行缩进的文本内容。\n这是第二行"; 运行效果如下图所示&#xff1a; 虽…

java入门,从CK导一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql&#xff0c;数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库&#xff0c;第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份&#xff0c;或者将需要导出的数据建一张新的表了…

HarmonyOS 实现底部导航栏

该功能实现需要Tabs、TabsController、TabContent、Column等组件 Tabs相当于Android中的BottomNavigationView TabContent相当于Android中的fragment TabBuilder内相当于每个Item Entry Component struct Main {public tabsController : object new TabsController()State c…

让资产权利归于建设者:Kiosk使过程变得更简单

区块链凭借着其将人的权利地位置于平台之上的能力&#xff0c;可以重塑互联网&#xff0c;而自托管为个人提供了控制和管理其资产和数据的能力。链上交易支持建设者和客户之间的点对点交易。这些特质联合起来&#xff0c;可以将数字世界从基于价值提取的模式转变为基于价值创造…

IIC总线概述和通信时序代码详细图文解析

IIC总线 1 IIC总线概述 I2C总线两线制包括&#xff1a;串行数据SDA&#xff08;Serial Data&#xff09;、串行时钟SCL&#xff08;Serial Clock&#xff09;。总线必须由主机&#xff08;通常为微控制器&#xff09;控制&#xff0c;主机产生串行时钟&#xff08;SCL&#x…

人工智能飞速发展的今天,IT行业能做些什么?

原创 | 文 BFT机器人 01 IT行业&#xff1a;信息流通的“媒介” IT行业作为一个信息化产业&#xff0c;通过运用信息手段和技术&#xff0c;为客户收集、整理、储存、传递信息情报&#xff0c;提供信息服务&#xff0c;并提供相应的信息手段、信息技术等服务。 近年来&#xf…

Pikachu漏洞练习平台之SSRF(服务器端请求伪造)

注意区分CSRF和SSRF&#xff1a; CSRF&#xff1a;跨站请求伪造攻击&#xff0c;由客户端发起&#xff1b; SSRF&#xff1a;是服务器端请求伪造&#xff0c;由服务器发起。 SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能&#xff0c;但又没有对目标…

串口通信

1.1 串口简介 在串口中 用0和1表示高低电平 VCC供电 设备A给设备B供电 如果各自都有供电的模块就不需要连接这个线 GND的连线是为了获取相同的电压基准 因为有时候获得电压各自判断的标准不一样 可能获得不一样的电压 如果想A发送数据给B那么蓝线不需要连接 如果想B发送给A那么…

语聚AI:无代码开发的API连接新选择,助力电商平台客户服务提升

无代码开发&#xff1a;语聚AI的新选择 在企业运营中&#xff0c;客户服务扮演着重要的角色。然而&#xff0c;许多企业在日常的客服管理中面临着重复咨询、人工接待成本高、缺乏知识库支持以及客服渠道分散等问题。如何提高客服的效率和质量&#xff0c;成为了企业急需解决的…

基于ssm+vue设备配件检修管理系统

摘要 随着工业设备的日益复杂和多样化&#xff0c;设备配件的检修管理成为保障生产运行和设备寿命的关键环节。本研究基于SSM框架&#xff08;Spring Spring MVC MyBatis&#xff09;&#xff0c;致力于设计和实现一套全面、高效的设备配件检修管理系统。该系统不仅能够提高设…