Spring Boot获取文件路径详解

发布时间:2023-05-22

一、Spring Boot默认静态文件路径

在Spring Boot中,我们可以通过静态资源文件夹来存放我们的网页、图片等资源,其中默认的静态资源文件夹是 /src/main/resources/static。例如我们将一个名为 index.html 的网页文件放在该目录下,那我们可以通过 URL:localhost:8080/index.html 来访问该网页。 值得注意的是,如果我们不想使用默认路径,也可以通过 application.properties 文件重新指定静态资源文件夹的路径:

spring.resources.static-locations=classpath:/static/,file:/opt/files/

上述代码定义了静态资源文件夹的搜索位置,优先搜索项目的 classpath:/static/ 路径,若未找到则搜索文件系统下的 /opt/files/ 路径。

二、Spring Boot项目获取文件路径

在实际开发中,我们也常常需要获取项目中某个文件或目录的绝对路径,Spring Boot提供了多种方式来实现。以下是其中几种比较常见的方式:

1)利用 ClassPathResource 获取资源文件

通过 ClassPathResource 获取资源文件,可以获取存放在 classpath: 路径下的文件。下面是一个简单示例:

ClassPathResource resource = new ClassPathResource("config.properties");
String path = resource.getFile().getAbsolutePath();

上述代码实现了获取 classpath: 下的 config.properties 文件的绝对路径。

2)利用 ServletContext 获取资源文件

通过 ServletContext 获取资源文件,一般用于获取存放在 web 应用程序相对路径下的文件。下面是一个简单示例:

InputStream inputStream = request.getServletContext().getResourceAsStream("/WEB-INF/classes/file.txt");
String path = request.getServletContext().getRealPath("/WEB-INF/classes/file.txt");

上述代码实现了获取 webapp/WEB-INF/classes/file.txt 文件的流和绝对路径。

3)利用 ResourceLoader 获取资源文件

ResourceLoader 是一个高级的 Spring 特性,用于获取项目路径下的资源文件。下面是一个使用 ResourceLoader 获取 yml 配置文件的例子:

@Autowired
private ResourceLoader resourceLoader;
private String getConfig(String fileName) {
    Resource resource = resourceLoader.getResource("classpath:" + fileName);
    try {
        InputStream inputStream = resource.getInputStream();
        byte[] b = new byte[inputStream.available()];
        inputStream.read(b);
        return new String(b);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

上述代码实现了通过 ResourceLoader 获取 classpath: 下的 yml 配置文件。

三、小结

本文介绍了 Spring Boot 中获取文件路径的多种方式,包括获取静态文件路径和项目中一个文件或目录的绝对路径。通过这些方式,我们可以轻松地获取到所需文件的路径,从而实现对文件进行读取、写入等操作。