Spring Framework 5.0:Resources资源文件获取接口

来源:互联网 发布:java分布式 编辑:程序博客网 时间:2024/06/04 19:17

这里写图片描述

如果我们把相关的资源文件放在resources里面,最后就会编译到target目录下。

Resources

https://docs.spring.io/spring/docs/5.0.1.BUILD-SNAPSHOT/spring-framework-reference/core.html#resources

Spring给我们封装了统一的接口,实现类有:

ClassPathResourceFileSystemResourceUrlResourceByteArrayResourceInputStreamResourceServletContextResource

代码演示:

        // 资源对象        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

https://docs.spring.io/spring/docs/5.0.1.BUILD-SNAPSHOT/spring-framework-reference/core.html#resources-implementations-inputstreamresource

        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();    }
原创粉丝点击