1.概述

在java日常业务开发中我们经常有可能读取一些自定义配置或者文件。比如说公私钥文件、一些固定的词典文件之类的,这一类统称为资源(Resource)。很多情况下都是自己写IO来读取。今天开始你可以不用在造轮子了。因为Spring自带有资源加载功能,甚至还有非常便利的方法将读取的内容注入Spring bean。接下来我们就来见识一下吧。

2.通过Resource接口

我们可以使用Resource接口简化资源文件的定位。Spring帮助我们使用资源加载器查找和读取资源,资源加载器根据提供的路径决定选择哪个Resource实现。

2.1 使用Resource的实现类

org.springframework.core.io.Resource接口常用的有两个实现类:
org.springframework.core.io.ClassPathResource 用来加载classpath下的资源,我们直接读取springboot 配置文件 application.properties,其中已经写入了一个配置 server.port=8080
​​

org.springframework.core.io.FileSystemResource 用来加载系统文件,通常通过文件的绝对或者相对路径来读取。上面的例子我们用这个来试一试。不同的是这次我们需要文件的路径。

2.2 使用ResourceLoader

如果你业务中需要使用延迟加载,我们可以使用类ResourceLoader:

我们也可以使用@Autowired将ResourceLoader注入我们的bean :

根据上图ApplicationContext 继承了ResourceLoader 接口。因此我们可以通过Spring bean 注入的方式来读取资源。
​​

这种使用方式看上去更Spring,接着往下看,还有更Spring的骚操作。

2.3使用@Value注解

我们直接使用@Value注解将资源直接注入Spring bean。还有这种操作!不行了!我已经迫不及待的要写几行试试了:

​​

完美无暇!断言全部正确!不知道能不能读取图片。我想也是可以的,这个留给你自己发掘。但是就这么结束了吗?玩一个刺激点的。为什么不直接解析出来并注入对象呢?SpEL(Spring Expression Language)可以做到这一点。让我们来见识一下吧。
2.4 使用SpEL直接解析
为了展现灵活性,这里我们定义自己的解析类。我们定义了一个读取配置文件的工具类 cn.felord.mapstruct.util.ResourceReader

​​

两个方法都是一样的效果,但是要展现的是不同途径。下面的代码必须让它的出场与众不同:

​​

被注释掉的代码同样管用,你很容易观察到它们之间的差别。

愿与诸君共进步,大量的面试题及答案还有资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系
可以关注小编+转发文章+私信【架构资料】获取,最后祝大家都能拿到自己心仪的offer

通过Spring来读取文件的各种方法相关推荐

  1. C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结。

    C++/Php/Python/Shell 程序按行读取文件或者控制台方法总结. 一.总结 C++/Php/Python/Shell 程序按行读取文件或者控制台(php读取标准输入:$fp = fope ...

  2. python 四种逐行读取文件内容的方法

    目录 方法一:readline函数 方法二:一次读取多行数据 方法三:直接for循环 方法四:使用fileinput模块 下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用 ...

  3. python读取文件多行内容-Python逐行读取文件内容的方法总结

    Python四种逐行读取文件内容的方法 下面四种Python逐行读取文件内容的方法, 分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修 ...

  4. python读取大文件的某行_Python按行读取文件的实现方法【小文件和大文件读取】...

    本文实例讲述了Python按行读取文件的实现方法.分享给大家供大家参考,具体如下: 小文件: #coding=utf-8 #author: walker #date: 2013-12-30 #func ...

  5. python遍历文件内容_Python四种逐行读取文件内容的方法

    下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修改即可. 方法一:readline函 ...

  6. phpexcel 日期 时分秒_thinkPHP+PHPExcel实现读取文件日期的方法含时分秒

    Vendor('PHPExcel.PHPExcel.IOFactory'); $inputFileName = 'Public/demo/demo.xls'; $objReader = new PHP ...

  7. python按行读取文件效率高吗_Python按行读取文件的实现方法【小文件和大文件读取】...

    本文实例讲述了Python按行读取文件的实现方法.分享给大家供大家参考,具体如下: 小文件: #coding=utf-8 #author: walker #date: 2013-12-30 #func ...

  8. SPSS Modeler导入excel文件时出现“无法读取文件列名”解决方法

    SPSS Modeler导入excel文件时出现"无法读取文件列名"解决方法 经过本人多次尝试,终于发现了原因 原因是:excel文件在后台打开了,因此spss modeler读取 ...

  9. Java读取文件为字符串方法

    Java读取文件为字符串方法 方法一:使用Files工具类 java.nio.file.Files工具类,不依赖三方组件 Path.of方法在jdk11才支持 public String fileTo ...

最新文章

  1. 目标检测中的分类和定位冲突问题
  2. java 连接池 druid_从零开始学 Java - 数据库连接池的选择 Druid
  3. 管理类业务系统菜单部分美化经验分享,把所有好的东西拿过来拼凑并不容易能形成整体的效果...
  4. 使用DBCC SHRINKFILE EMPTYFILE 选项迁移数据
  5. Linux_磁盘管理
  6. 绝对定位和浮动的区别和运用
  7. 一开机就提示脱机工作_「华为手机维修自学教程」华为手机的开机触发电路 华为维修技巧...
  8. Go语言学习Day05
  9. 多肉建议多久浇一次水?
  10. 宇枫资本上班族理财的方法
  11. 火山PC隐藏任务栏程序图标教程
  12. 20190401每周精品之认知
  13. 006Python-Re库入门(正则表达式)
  14. 硬盘是计算机的 奥鹏,奥鹏2016计算机应用基础一
  15. 理解ES6中的暂时死区(TDZ)
  16. java 判断图片格式_Java判断上传图片格式的实例代码
  17. 首页技术支持常见问题宽带外网IP显示为10、100、172开头,没有公网IP,如何解决?...
  18. 咸鱼之王攻略及Mac M1 M2 系统电脑挂机解决无法登录的问题
  19. linux nas目录老是掉,Linux运维:NAS存储故障案例
  20. js获取当前月、上一月和下一月

热门文章

  1. 一款使用RN + TS开发的仿喜马拉雅的听书应用
  2. 颗粒20目到40目是多大?
  3. 信号继电器 DX-31B DC220V
  4. EM算法(期望最大化算法)理论概述
  5. Teleport Ultra抓取不到登陆后的页面
  6. 分支限界——最大团问题
  7. windows SDK模拟游戏钢琴的实现(二)
  8. 合作共赢位来_张亚超
  9. 使用finereport自定义滚动条
  10. 胰高血糖素简介,及试剂盒检测原理