SpringBoot项目中读取resource目录下的文件(六种方法)

Spring Boot读取resources目录文件方法详解 主要介绍了Spring Boot读取resources目录文件方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载
AI摘要

本文详细介绍了在SpringBoot项目中读取resource目录下文件的六种方法,包括获取绝对路径、直接获取文件流以及使用封装类等技术手段,并提供了测试jar包中文件读取可行性的代码示例。

文章目录

一、先获取绝对路径再读取文件(jar包里会获取不到)

方法一:类加载器的getResource().getPath()获取目录路径
    /**
     * 方法一:使用类加载器的getResource().getPath()获取全路径再拼接文件名,最后根据文件路径获取文件流
     * 备注:jar包不可用,因为jar包中没有一个实际的路径存放文件
     *
     * @param fileName
     * @return
     * @throws FileNotFoundException
     */
    public BufferedReader function1(String fileName) throws FileNotFoundException {

        //   /Users//code/read-resource/target/classes/
        String path = this.getClass().getClassLoader().getResource("").getPath();
        //   /Users//code/read-resource/target/classes/测试.txt
        String filePath = path + fileName;

        return new BufferedReader(new FileReader(filePath));
    }
方法二:类加载器的getResource().getPath()获取文件路径
    /**
     * 方法二:使用类加载器的getResource().getPath(),传参直接获取文件路径,再根据文件路径获取文件流
     * 备注:jar包不可用,因为jar包中没有一个实际的路径存放文件
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function2(String fileName) throws IOException {

        //   /Users//code/read-resource/target/classes/%e6%b5%8b%e8%af%95.txt
        String filePath = this.getClass().getClassLoader().getResource(fileName).getPath();

        //可以看到上面读取到路径的中文被URLEncoder编码了,所以需要先用URLDecoder解码一下,恢复中文
        filePath = URLDecoder.decode(filePath, "UTF-8");

        return new BufferedReader(new FileReader(filePath));
    }

二、直接获取文件流(jar包可用)

方法三:ClassLoader对象的getResourceAsStream()
    /**
     * 方法三:使用类加载器的getResourceAsStream(),直接获取文件流
     * 备注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function3(String fileName) throws IOException {
        //getResourceAsStream(fileName) 等价于getResource(fileName).openStream()
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
        if (inputStream == null) {
            throw new FileNotFoundException(fileName);
        }
        return new BufferedReader(new InputStreamReader(inputStream));
    }
方法四:Class对象的getResourceAsStream()
  1. ClassLoader 的getResource()是从类路径的根路径查找的,所以不加“/”也可以

  2. Class 的getResource()是从当前类所在的包路径查找资源,所以如果不加“/”表示去根路径查找的话,是找不到的

    /**
     * 方法四:使用Class对象的getResourceAsStream()获取文件流
     * 备注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function4(String fileName) throws IOException {
        //getResourceAsStream(fileName) 等价于getResource(fileName).openStream()
        InputStream inputStream = this.getClass().getResourceAsStream("/" + fileName);
        if (inputStream == null) {
            throw new FileNotFoundException(fileName);
        }
        return new BufferedReader(new InputStreamReader(inputStream));
    }
    

三、使用封装好的类(jar包可用)

源码里还是方法三、方法四,只不过做了一些封装,更方便开发

方法五:Spring提供的ClassPathResource
    /**
     * 方法五:使用Spring提供的ClassPathResource获取
     * 备注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function5(String fileName) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(fileName);
        InputStream inputStream = classPathResource.getInputStream();
        return new BufferedReader(new InputStreamReader(inputStream));
    }
方法六:Hutool提供的ResourceUtil
    /**
     * 方法六:使用Hutool的ResourceUtil
     * 备注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function6(String fileName) throws IOException {
        List<URL> resources = ResourceUtil.getResources(fileName);
        URL resource = resources.get(0);
        return new BufferedReader(new InputStreamReader(resource.openStream()));
    }

四、测试jar包中是否可用的代码

1)编写接口

   //Jar包启动时根据传入的不同funcation值来选择调用哪个方法测试
    @Value("${function}")
    private int function;    


    @GetMapping("/test")
    public String test() throws IOException {
        //需要在resource里读取的文件
        String fileName = "测试.txt";

        //调用方法
        System.out.println("调用function" + function);
        BufferedReader bufferedReader = null;
        switch (function) {
            case 1:
                bufferedReader = function1(fileName);
                break;
            case 2:
                bufferedReader = function2(fileName);
                break;
            case 3:
                bufferedReader = function3(fileName);
                break;
            case 4:
                bufferedReader = function4(fileName);
                break;
            case 5:
                bufferedReader = function5(fileName);
                break;
            case 6:
                bufferedReader = function6(fileName);
                break;
            default:
        }

        //读取并输出
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line).append("
");
        }
        System.out.println(sb);
        return sb.toString();
    }

2)启动jar包指令

java -jar -Dfunction=6 read-resource-1.0-SNAPSHOT.jar

  • 更改-Dfunction=6的值就能动态切换方法了。
【数据清洗】数据清洗流程及经验 预处理阶段 预处理阶段主要做两件事情: 一是将数据导入处理工具。 二是看数据。包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。 第一步:缺失值清洗 四个步骤: 1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。 2、去除不需要的... 阅读详情

相关推荐

iStore增强插件 如何重塑家庭网络与存储体验

本文深入解析了iStore增强插件如何重塑家庭数字生活体验。它通过集成智能流控、一键式文件共享、媒体服务器及智能家居网关等功能,将复杂的网络配置、存储管理与设备协同简化为图形化操作,有效解决了家庭网络卡顿、数据割裂与使用门槛高等核心痛点,让普通用户也能轻松打造高效、稳定、安全的家庭数字中枢。

prometheus9mon的博客 648

springboot读取resources下文件方式

项目中很多时候需要读取自定义配置文件 1、使用项目内路径读取,只能在开发工具中使用,部署之后无法读取。(不通用) 类似:src/main/resources/default.xml File file = new File("src/main/resources/default.xml"); @Test public void testReadFile2() throws IOException { File file = new File("src/main/

qq_34565436的博客 2万+

避坑指南:Winbond W25Q256JV QSPI Flash状态寄存器那些坑(含QE位不可改的解决方案)

本文深度解析Winbond W25Q256JV QSPI Flash状态寄存器的常见问题与解决方案,重点解决QE位不可修改、写保护区域异常等典型问题。通过实战代码示例和寄存器配置技巧,帮助开发者高效完成Flash读写测试与性能优化,避免常见设计陷阱。

ol7890123的博客 309

Spring Boot获取resources目录下的文件的三种方式

在Spring Boot项目中,经常需要获取resources目录下的文件。这些文件可以包括配置文件、模板文件、静态资源等。本文将介绍三种常用的方法来获取resources目录下的文件。

terence的博客 1万+

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5858

避开这些坑,你的Python爬虫才能稳定爬取IEEE Xplore(含反爬策略与MongoDB存储实战)

本文详细介绍了如何构建稳定的Python爬虫系统以爬取IEEE Xplore学术论文,包括反爬策略、MongoDB存储优化和断点续传机制。通过动态等待时间算法、请求头指纹管理和会话保持策略,有效应对IEEE的反爬机制。同时,优化MongoDB数据结构和索引,提升存储效率。最后,强调法律合规与伦理考量,确保爬虫合法合规运行。

weixin_29031057的博客 1095

Spring Boot获取resources目录下文件的方式

在 Spring Boot 中,获取resources目录下的文件为例,可以通过以下几种方式获取:

瓜瓜嘟嘟 5430

【专栏导引贴】100+智能优化算法:从背景原理到代码实战(持续更新)

本专栏系统整理100+种现代优化算法,涵盖粒子群优化(PSO)、遗传算法(GA)、鲸鱼优化(WOA)等经典方法,以及白鲸优化(BWO)、非洲秃鹫优化(AVOA)等新兴算法。每篇详解包含生物启发原理、数学模型、代码实现及工程应用,采用统一编程风格,提供可直接运行的实例代码。专栏持续更新,旨在为研究者提供系统化的智能优化算法参考资料,实现从理论到实践的完整知识链。目前已收录23种算法,包括蚁群系统(ACS)、蝙蝠算法(BA)、天牛须搜索(BAS)等自然启发式优化方法。

qq_42212808的博客 3654
上一篇: Springboot 3项目整合Knife4j接口文档(接口分组详细教程)
下一篇: SQL 基础 BETWEEN 的常见用法
普通网友
博客等级 码龄4年 3126粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值