引言: 在Spring Boot构建的项目中,在某些情况下,需要自行去读取项目中的某些文件内容,那该如何以一种轻快简单的方式读取文件内容呢? 

基于ApplicationContext读取

在Spring Bean中获取ApplicationContext引用的方式:

 @Component
public class MyBean implement ApplicationContextAware {
private static ApplicationContext context;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return context;
} ..........
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

关于如何动态注入ApplicationContext的方法,可以参见笔者之前的文章:动态注入Spring中的Bean实例快速指南

在获取了ApplicationContext实例之后,就可以基于applicationContext动态读取文件内容了:

使用fileSystem

Resource resource = appContext.getResource(“file:d:\testing.jpg”);

使用url path

Resource resource = appContext.getResource(“url:http://www.test.com/testing.txt“);

基于classpath

Resource resource = appContext.getResource(“classpath:resources/common/test.txt”); 
在获取resource对象之后,就可以获取file的对象,从而可以读取文件内容。

基于ResourceLoader

在Spring中专门提供了一个ResourceLoader的接口来方便进行classpath的路径访问。 
基于Aware方式注入ResourceLoader,具体的方式如下:

  public class MyBean implements ResourceLoaderAware {
private ResourceLoader resourceLoader; public void setResourceLoader(ResourceLoader resourceLoader) {
this.resourceLoader = resourceLoader;
} public Resource getResource(String location){
return resourceLoader.getResource(location);
}
.......
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

第二种方式为,直接基于@Bean的方式在Spring Boot中创建对应的实例,具体方式如下:

    .....
@Bean
public ResourceLoader createResourceLoader() {
return new DefaultResourceLoader();
}
.....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上两种方式都可以实现ResourceLoader对象的创建。

在获取ResourceLoader的对象实例之后,将可以基于如下方式来获取配置信息:

Resource resource = resourceLoader.getResource(“classpath:resources/config.xml”);

另外一种方式可以直接读取文件的内容:

String content = IOUtil.toString(resourceLoader.getResource( 
“classpath:resources/test.txt”).getInputStream());

IOUtil是Apache common项目中的IO类库包,可以通过以下方式来直接加入依赖:

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

何为classpath

在Maven项目中,所有的resources文件都将被复制到classes目录下。classpath在tomcat项目中就是/classes,/lib和tomcat下的其他路径。 
对于开发者来说,一般就是classes所在目录就是classpath路径的起点和base path.

总结

古语有云:工欲善其事,必先利其器。好的工具和方法可以让工作变得轻松,如鱼得水,用更少的代码完成更多的任务,多总结多分析,多积累,才有效率的提升。 

关于我自己

这些技巧和总结都是来自于实际的工作,欢迎大家反馈和提出自己的意见。 
文章也会同步发在今日头条的头条号上,搜索 “程序加油站”,就可以找到。

在Spring Boot快捷地读取文件内容的若干种方式的更多相关文章

  1. PHP读取文件内容的五种方式(转载)

    php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); php读取文件内容: -----第一种方法--- ...

  2. PHP读取文件内容的五种方式

    -----第一种方法-----fread()-------- <?php $file_path = "test.txt"; if(file_exists($file_path ...

  3. java读取文件内容常见几种方式

    ①随机读取文件内容 ②以行为单位读取文件,常用于读面向行的格式化文件 ③以字符为单位读取文件,常用于读文本,数字等类型的文件 ④以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件 pa ...

  4. spring boot 在不同环境下读取不同配置文件的一种方式

    在工程中,通常有根据不同的环境读取不同配置文件的需求,对于spring boot 来说,默认读取的是application.yml 或者 application.properties.为了区分不同的环 ...

  5. PHP读取文件内容的三种方式

    <?php // 第一种读取方式 header("content-type:text/html;charset=utf-8"); // 文件路径 $fileA = " ...

  6. Python读取文件内容的三种方式并比较

    本次实验的文件是一个60M的文件,共计392660行内容. 程序一: def one(): start = time.clock() fo = open(file,'r') fc = fo.readl ...

  7. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  8. Spring Boot 定义系统启动任务,你会几种方式?

    在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...

  9. php中读取文件内容的几种方法

    1.fread string fread ( int $handle , int $length ) fread() 从 handle 指向的文件中读取最多 length 个字节.该函数在读取完最多 ...

随机推荐

  1. asp.net 13 缓存,Session存储

    1.缓存 将数据从数据库/文件取出来放在服务器的内存中,这样后面的用来获取数据,不用查询数据库,直接从内存(缓冲)中获取数据,提高了访问的速度,节省了时间,也减轻了数据库的压力. 缓冲空间换时间的技术 ...

  2. 服务端相关知识学习(六)Zookeeper client

    Zookeeper的client是通过Zookeeper类提供的.前面曾经说过,Zookeeper给使用者提供的是一个类似操作系统的文件结构,只不过这个结构是分布式的.可以理解为一个分布式的文件系统. ...

  3. opencv 单目标模板匹配(只适用于模板与目标尺度相同)

    #include <iostream> #include "opencv/cv.h" #include "opencv/cxcore.h" #inc ...

  4. javascript学习方法指南

    Javascript看似无限的可能性使得基于HTML和CSS的公共网站成为过去.然而,尽管JavaScript为用户提供了出色的动态体验,但它也为开发人员创建了一个雷区.因此,Javascript搜索 ...

  5. 原型相关的知识点-new的实现原理

    let obj = {}let fn = function(){ this.content = 'zhangsan'} let fn2 = new fn() fn2是fn实例化出来的一个对象,要了解n ...

  6. golang 环境变量讲解

    以下配置以MAC 下配置为例,但其他环境下大同小异. GOROOT就是go的安装路径在~/.bash_profile中添加下面语句: GOROOT=/usr/local/go export GOROO ...

  7. MYSQL 增加语句(数据)

    增加数据     如果你失忆了,希望你能想起曾经为了追求梦想的你.     前一节我们学习了查询语句 SELECT,这节课,我们学习增加 INSERT INTO ****  VALUES ****,基 ...

  8. ubuntu - 14.04,安装docker(源代码管理工具)

    一,安装docker: 1,安装curl:在shell中执行:sudo apt-get install curl 2,shell中执行:curl -sSL https://get.daocloud.i ...

  9. Mysql(四)-2:多表查询

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name varchar(20) ); create ta ...

  10. Winfrom UI 美化 MetroModernUI库应用实例

    使用方式: 选择项目==>右键==>管理NuGet安装包==>输入Metro==> ==>添加选项卡(自定义命名,例如Metrol UI)==>浏览 ==>加 ...