zoukankan      html  css  js  c++  java
  • Spring 资源获取 --Resource

    Spring把其资源做了一个抽象,底层使用统一的资源访问接口来访问Spring的所有资源。也就是说,不管什么格式的文件,也不管文件在哪里,到Spring 底层,  都只有一个访问接口,Resource。整个Spring的资源定义在spring-core 的包中。

    这套接口分为两部分,Resource和ResourceLoader,其中是对资源的抽象,后者负责加载资源。Spring的ApplicationContext实现了ResourceLoader接口。

    一、使用 ClassPathResource读取文件

    @Test
        public void testClassPathResource() {
            String fileName = "111.txt";
            ClassPathResource resource = new ClassPathResource(fileName);
            System.out.println(resource.getFilename());
            System.out.println(resource.getDescription());
            try {
                File file = resource.getFile();
                String tempString = null;
                int line = 1;
                BufferedReader reader = new BufferedReader(new FileReader(file));
                while ((tempString = reader.readLine()) != null) {
                    System.out.println("line " + line +  ":" + tempString);
                    line++;
                }
                reader.close();
            }catch (Exception e) {
                log.error("读取文件异常 , 文件名:{}", fileName, e);
            }
        }

    执行结果:

    111.txt
    class path resource [111.txt]
    line 1:11111
    line 2:22222
    line 3:33333

    二、使用FileSystemResource读取文件

    @Test
        public void testFileSystemResource() {
            String fileName = "111.txt";
            Resource resource = new FileSystemResource("src/main/resources/111.txt");
            System.out.println(resource.getFilename());
            System.out.println(resource.getDescription());
            try {
                File file = resource.getFile();
                String tempString = null;
                int line = 1;
                BufferedReader reader = new BufferedReader(new FileReader(file));
                while ((tempString = reader.readLine()) != null) {
                    System.out.println("line " + line +  ":" + tempString);
                    line++;
                }
                reader.close();
            }catch (Exception e) {
                log.error("读取文件异常 , 文件名:{}", fileName, e);
            }
        }

    执行结果:

    111.txt
    file [D:projectsspring-testsrcmain esources111.txt]
    line 1:11111
    line 2:22222
    line 3:33333

    三、使用ResourceLoader

    @Test
        public void testResourceLoader1() {
    
            String fileName = "111.txt";
            ResourceLoader loader = new DefaultResourceLoader();
            Resource resource = loader.getResource(fileName);
            System.out.println(resource.getFilename());
            System.out.println(resource.getDescription());
            try {
                File file = resource.getFile();
                String tempString = null;
                int line = 1;
                BufferedReader reader = new BufferedReader(new FileReader(file));
                while ((tempString = reader.readLine()) != null) {
                    System.out.println("line " + line +  ":" + tempString);
                    line++;
                }
                reader.close();
            }catch (Exception e) {
                log.error("读取文件异常 , 文件名:{}", fileName, e);
            }
        }

    执行结果:

    111.txt
    class path resource [111.txt]
    line 1:11111
    line 2:22222
    line 3:33333

    @Test
        public void testResourceLoader2() {
    
            String fileName = "111.txt";
            ResourceLoader loader = new DefaultResourceLoader();
            Resource resource = loader.getResource("file:src/main/resources/111.txt");
            System.out.println(resource.getFilename());
            System.out.println(resource.getDescription());
            try {
                File file = resource.getFile();
                String tempString = null;
                int line = 1;
                BufferedReader reader = new BufferedReader(new FileReader(file));
                while ((tempString = reader.readLine()) != null) {
                    System.out.println("line " + line +  ":" + tempString);
                    line++;
                }
                reader.close();
            }catch (Exception e) {
                log.error("读取文件异常 , 文件名:{}", fileName, e);
            }
        }

    执行结果:

    111.txt
    URL [file:src/main/resources/111.txt]
    line 1:11111
    line 2:22222
    line 3:33333

    四:注意事项

    本地测试可以正常使用Resource进行文件读取操作,但是当打成jar包后, 使用Resource读取文件将会报File not found 的异常。因为在jar包中,读取文件返回的是jar协议地址,jar:file:/xxx/xx.jar!/xxxx, 而Resource中的getFile方法对非file协议的地址,会抛出FileNotFoundException。要想操作jar中的文件,只要用可以读取jar中文件的方式加载即可,比如 xx.class.getClassLoader().getResouceAsStream()这种以流的形式读取文件的方式,所以使用读取文件流就可以拿到了。

  • 相关阅读:
    Redis 详解 (一) StackExchange.Redis Client
    redis在.net架构中的应用(1)--利用servicestack连接redis
    .NET中使用Redis:http://www.cnblogs.com/yangecnu/p/Introduct-Redis-in-DotNET.html
    SQL Server日期函数总结
    SQL Server 日期和时间函数
    16Aspx源码论坛
    方差和偏差的区别
    写在中秋节的前?秒
    装系统那些事儿-1-电脑的启动流程
    查找重复的数
  • 原文地址:https://www.cnblogs.com/chwy/p/13622475.html
Copyright © 2011-2022 走看看