• Spring项目读取resource下的文件


    目录

      一、前提条件

      二、使用ClassPathResource类读取

        2.1、Controller、service中使用ClassPathResource

        2.2、单元测试使用ClassPathResource

      三、使用FileSystemResource类读取文件

      

     

    一、前提条件

      要去读取的文件是存放在project/src/main/resources目录下的,如下图中的test.txt文件。

      

    二、使用ClassPathResource类读取

    2.1、Controller、service中使用ClassPathResource

      不管是在哪一层(service、controller..),都可以使用这种方式,甚至是单元测试中,也是可以的。

    package cn.ganlixin.demo.controller;
    
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    @RestController
    public class TestController {
    
        @RequestMapping("testFile")
        public String testFile() throws IOException {
            // ClassPathResource类的构造方法接收路径名称,自动去classpath路径下找文件
            ClassPathResource classPathResource = new ClassPathResource("test.txt");
            
            // 获得File对象,当然也可以获取输入流对象
            File file = classPathResource.getFile();
            
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            StringBuilder content = new StringBuilder();
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line);
            }
            
            return content.toString();
        }
    }
    

    2.2、单元测试使用ClassPathResource

      单元测试也是可以使用ClassPathResource,但是需要注意:

      1、单元测试的资源目录默认是project/src/test/resources,如果该目录下找到单元测试需要的文件,那么就用找到的文件;

      2、如果在单元测试的资源目录下没有找到单元测试需要的文件,就会去找/project/src/main/resources目录下的同名文件进行操作。

    package cn.ganlixin.demo.example;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class ApplicationConfigTest {
    
        @Test
        public void testFile() throws IOException {
            final ClassPathResource classPathResource = new ClassPathResource("test.txt");
            final File file = classPathResource.getFile();
    
            final BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
    

      

    三、使用FileSystemResource类读取文件

      FileSystemResource这个类在找文件的时候就是按照给定的路径名去找,默认的当前目录就是项目根目录

      使用该类来查找文件时,需要保证文件路径完全正确,另外,在代码中将路径写死是一个不好的习惯,特别是一个文件的路径在不同的主机上的位置(层级目录)不一定相同,所以我们开发过程中很少使用这种方式。

      FileSystemResource的用法和ClassPathResource的用法相似,因为他们都继承了AbstractResource这个抽象类。

    package cn.ganlixin.demo.example;
    
    import org.junit.Test;
    import org.springframework.core.io.FileSystemResource;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileTest extends ApplicationConfigTest {
    
        @Test
        public void testFile() throws IOException {
    
            FileSystemResource resource = new FileSystemResource("./");
            System.out.println(resource.getFile().getAbsolutePath());
            // 传入当前路径,获得的是项目根目录:/Users/ganlixin/code/Spring/demo/example/.
    
            // 传入根目录路径,获得的就是操作系统的根目录
            resource = new FileSystemResource("/");
            System.out.println(resource.getFile().getAbsolutePath());  // 输出 /
    
            // 获取单元测试resources目录下的test.txt,需要指定详细的路径
            resource = new FileSystemResource("src/test/resources/test.txt");
            final File file = resource.getFile();
    
            final BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
    

      

      这里就列举了两种方式,还有其他很多方式,这两种应该够用了

  • 相关阅读:
    微信多业务
    jps命令
    三白话经典算法系列 Shell排序实现
    无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案
    Timus 1777. Anindilyakwa 奇怪的问题计数
    tokumx经营报表
    Quartz CronTrigger应用
    HDU 3681 BFS&像缩进DP&二分法
    01背包问题
    Web模板
  • 原文地址:https://www.cnblogs.com/-beyond/p/11689291.html
Copyright © 2020-2023  润新知