在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.
总结
古语有云:工欲善其事,必先利其器。好的工具和方法可以让工作变得轻松,如鱼得水,用更少的代码完成更多的任务,多总结多分析,多积累,才有效率的提升。
关于我自己
这些技巧和总结都是来自于实际的工作,欢迎大家反馈和提出自己的意见。
文章也会同步发在今日头条的头条号上,搜索 “程序加油站”,就可以找到。