在SpringBoot快捷地读取⽂件内容的若⼲种⽅式
引⾔: 在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;
}
..........
}
关于如何动态注⼊ApplicationContext的⽅法,可以参见笔者之前的⽂章:
在获取了ApplicationContext实例之后,就可以基于applicationContext动态读取⽂件内容了:
使⽤fileSystem
Resource resource = Resource(“file:d:\testing.jpg”);
使⽤url path
基于classpath
Resource resource = Resource(“classpath:resources/”);
在获取resource对象之后,就可以获取file的对象,从⽽可以读取⽂件内容。
基于ResourceLoader
在Spring中专门提供了⼀个ResourceLoader的接⼝来⽅便进⾏classpath的路径访问。
基于Aware⽅式注⼊ResourceLoader,具体的⽅式如下:
public class MyBean implements ResourceLoaderAware {
private ResourceLoader resourceLoader;
public void setResourceLoader(ResourceLoader resourceLoader) {
}
public Resource getResource(String location){
Resource(location);
}
.......
}
第⼆种⽅式为,直接基于@Bean的⽅式在Spring Boot中创建对应的实例,具体⽅式如下:
.....
@Bean
public ResourceLoader createResourceLoader() {
return new DefaultResourceLoader();
}
.....
以上两种⽅式都可以实现ResourceLoader对象的创建。
在获取ResourceLoader的对象实例之后,将可以基于如下⽅式来获取配置信息:
Resource resource = Resource(“classpath:l”);
另外⼀种⽅式可以直接读取⽂件的内容:
String content = Resource(
“classpath:”).getInputStream());
IOUtil是Apache common项⽬中的IO类库包,可以通过以下⽅式来直接加⼊依赖:
<dependency>
spring到底是干啥的<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
何为classpath
在Maven项⽬中,所有的resources⽂件都将被复制到classes⽬录下。classpath在tomcat项⽬中就是/classes,/lib和tomcat下的其他路径。
对于开发者来说,⼀般就是classes所在⽬录就是classpath路径的起点和base path.
总结
古语有云:⼯欲善其事,必先利其器。好的⼯具和⽅法可以让⼯作变得轻松,如鱼得⽔,⽤更少的代码完成更多的任务,多总结多分析,多积累,才有效率的提升。
关于我⾃⼰
这些技巧和总结都是来⾃于实际的⼯作,欢迎⼤家反馈和提出⾃⼰的意见。 ⽂章也会同步发在今⽇头条的头条号上,搜索 “程序加油站”,就可以到。