如果我们把相关的资源文件放在resources
里面,最后就会编译到target
目录下。
Resources
Spring给我们封装了统一的接口,实现类有:
ClassPathResource
FileSystemResource
UrlResource
ByteArrayResource
InputStreamResource
ServletContextResource
代码演示:
// 资源对象
Resource resource = new ClassPathResource("1.txt");
// 文件对象
File file = resource.getFile();
// 读取文件
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String str;
while ((str = bufferedReader.readLine()) != null){
System.out.println(str); // 打印读取到的内容
}
bufferedReader.close();
成功读取到了1.txt
文件中的内容。
上面代码是通过classpath的方式,如果换作FileSystemResource
呢?
Resource resource = new FileSystemResource("/绝对路径/resources/1.txt");
文件系统的方式。
ResourceLoader
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = resourceLoader.getResource("classpath:1.txt");
// 文件对象
File file = resource.getFile();
// 读取文件
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String str;
while ((str = bufferedReader.readLine()) != null){
System.out.println(str); // 打印读取到的内容
}
bufferedReader.close();
使用ResourceLoader
不一样的地方,要写一个前缀。
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = resourceLoader.getResource("classpath:1.txt");
怎么结合到IoC容器中
我们前面学了IoC容器
这个概念,我们的代码也是要统一到IoC容器里面,在Spring MVC里也是使用IoC容器来进行各种组件的加载。
因为,我们要考虑如何在IoC容器里实现?
1、比如我们有个MyTest组件
@Component("MyTest")
public class MyTest {
public void show() throws Exception {
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = resourceLoader.getResource("classpath:1.txt");
// 文件对象
File file = resource.getFile();
// 读取文件
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String str;
while ((str = bufferedReader.readLine()) != null){
System.out.println(str); // 打印读取到的内容
}
bufferedReader.close();
}
}
注意关键代码:@Component("MyTest")
2、
public static void main(String[] args) throws Exception{
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("SpringLean");
context.refresh();
MyTest myTest = context.getBean("MyTest",MyTest.class);
myTest.show();
}
这样就实现了
3、上面功能实现了,但还不够,我们还需要优化
@Autowired
ApplicationContext applicationContext;
public void show() throws Exception {
Resource resource = applicationContext.getResource("classpath:1.txt");
// 文件对象
File file = resource.getFile();
// 读取文件
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String str;
while ((str = bufferedReader.readLine()) != null){
System.out.println(str); // 打印读取到的内容
}
bufferedReader.close();
}