在Spring Boot快捷地读取文件内容的若干种方式
引言: 在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快捷地读取文件内容的若干种方式的更多相关文章
- PHP读取文件内容的五种方式(转载)
php读取文件内容的五种方式 分享下php读取文件内容的五种方法:好吧,写完后发现文件全部没有关闭.实际应用当中,请注意关闭 fclose($fp); php读取文件内容: -----第一种方法--- ...
- PHP读取文件内容的五种方式
-----第一种方法-----fread()-------- <?php $file_path = "test.txt"; if(file_exists($file_path ...
- java读取文件内容常见几种方式
①随机读取文件内容 ②以行为单位读取文件,常用于读面向行的格式化文件 ③以字符为单位读取文件,常用于读文本,数字等类型的文件 ④以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件 pa ...
- spring boot 在不同环境下读取不同配置文件的一种方式
在工程中,通常有根据不同的环境读取不同配置文件的需求,对于spring boot 来说,默认读取的是application.yml 或者 application.properties.为了区分不同的环 ...
- PHP读取文件内容的三种方式
<?php // 第一种读取方式 header("content-type:text/html;charset=utf-8"); // 文件路径 $fileA = " ...
- Python读取文件内容的三种方式并比较
本次实验的文件是一个60M的文件,共计392660行内容. 程序一: def one(): start = time.clock() fo = open(file,'r') fc = fo.readl ...
- php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)
php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...
- Spring Boot 定义系统启动任务,你会几种方式?
在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...
- php中读取文件内容的几种方法
1.fread string fread ( int $handle , int $length ) fread() 从 handle 指向的文件中读取最多 length 个字节.该函数在读取完最多 ...
随机推荐
- asp.net 13 缓存,Session存储
1.缓存 将数据从数据库/文件取出来放在服务器的内存中,这样后面的用来获取数据,不用查询数据库,直接从内存(缓冲)中获取数据,提高了访问的速度,节省了时间,也减轻了数据库的压力. 缓冲空间换时间的技术 ...
- 服务端相关知识学习(六)Zookeeper client
Zookeeper的client是通过Zookeeper类提供的.前面曾经说过,Zookeeper给使用者提供的是一个类似操作系统的文件结构,只不过这个结构是分布式的.可以理解为一个分布式的文件系统. ...
- opencv 单目标模板匹配(只适用于模板与目标尺度相同)
#include <iostream> #include "opencv/cv.h" #include "opencv/cxcore.h" #inc ...
- javascript学习方法指南
Javascript看似无限的可能性使得基于HTML和CSS的公共网站成为过去.然而,尽管JavaScript为用户提供了出色的动态体验,但它也为开发人员创建了一个雷区.因此,Javascript搜索 ...
- 原型相关的知识点-new的实现原理
let obj = {}let fn = function(){ this.content = 'zhangsan'} let fn2 = new fn() fn2是fn实例化出来的一个对象,要了解n ...
- golang 环境变量讲解
以下配置以MAC 下配置为例,但其他环境下大同小异. GOROOT就是go的安装路径在~/.bash_profile中添加下面语句: GOROOT=/usr/local/go export GOROO ...
- MYSQL 增加语句(数据)
增加数据 如果你失忆了,希望你能想起曾经为了追求梦想的你. 前一节我们学习了查询语句 SELECT,这节课,我们学习增加 INSERT INTO **** VALUES ****,基 ...
- ubuntu - 14.04,安装docker(源代码管理工具)
一,安装docker: 1,安装curl:在shell中执行:sudo apt-get install curl 2,shell中执行:curl -sSL https://get.daocloud.i ...
- Mysql(四)-2:多表查询
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table department( id int, name varchar(20) ); create ta ...
- Winfrom UI 美化 MetroModernUI库应用实例
使用方式: 选择项目==>右键==>管理NuGet安装包==>输入Metro==> ==>添加选项卡(自定义命名,例如Metrol UI)==>浏览 ==>加 ...