SpringBoot获取resources目录下的文件

 更新时间:2024年10月31日 11:00:18   作者:pan_junbiao  
在 Spring Boot 项目中,获取 resources 目录中的文件路径通常涉及到访问类路径资源,Spring Boot 提供了一些工具类和方法,下面小编就来和大家详细聊聊

在 Spring Boot 项目中,获取 resources 目录中的文件路径通常涉及到访问类路径资源(classpath resources)。Spring Boot 提供了一些工具类和方法,可以方便地访问这些资源。以下是一些常见的方法:

首先,我们在 Spring Boot 项目中的 resources (资源文件目录)下创建 file 目录,然后在 file 目录下创建 myBlog.txt 文件,并在文件中输入内容:您好,欢迎访问 pan_junbiao的博客。

1、使用项目路径

使用字符串方式写入文件的项目路径,这是最简单的方式。

String path = "src/main/resources/file/myBlog.txt";
@Test
public void readFileByPath() throws IOException
{
    String path = "src/main/resources/file/myBlog.txt";
    File file = new File(path);
 
    if (file.exists())
    {
        try (BufferedReader reader = new BufferedReader(new FileReader(file)))
        {
            String line;
            while ((line = reader.readLine()) != null)
            {
                System.out.println(line);
            }
        }
    } else
    {
        System.out.println("未找到文件!");
    }
}

执行结果:

2、使用 ApplicationContext 接口

ApplicationContext 是 Spring 框架中的一个核心接口,它是 Spring IoC 容器的实现之一,用于管理和组织应用程序中的各种 Bean,同时提供了一系列功能来支持依赖注入、AOP 等特性。同时 ApplicationContext 提供了对资源的访问能力,如文件、URL等。这通过 Resource 接口和 ResourceLoader 接口实现,使得访问外部资源变得简单。

@Autowired
private ApplicationContext applicationContext;
 
@Test
public void readResourceFile() throws IOException
{
    Resource resource = applicationContext.getResource("classpath:/file/myBlog.txt");
    InputStream inputStream = resource.getInputStream();
 
    if (inputStream != null) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
    } else {
        System.out.println("File not found");
    }
}

3、使用 ResourceLoader 接口

ResourceLoader 是 Spring 提供的一个接口,用于加载资源。你可以在 Spring Bean 中注入 ResourceLoader,然后使用它来加载资源。

@Autowired
private ResourceLoader resourceLoader;
 
@Test
public void readFileByResourceLoader() throws IOException
{
    Resource resource = resourceLoader.getResource("classpath:/file/myBlog.txt");
    if (resource.exists())
    {
        Path path = Paths.get(resource.getURI());
        String content = new String(Files.readAllBytes(path));
        System.out.println(content);
    } else
    {
        System.out.println("未找到文件!");
    }
}

4、使用 ClassLoader 类

你也可以使用当前类的 ClassLoader 来加载资源。ClassLoader 的 getResource 和 getResourceAsStream 方法可以访问类路径资源。

@Test
public void readFileByClassLoader() throws IOException
{
    ClassLoader classLoader = getClass().getClassLoader();
    InputStream inputStream = classLoader.getResourceAsStream("file/myBlog.txt");
 
    if (inputStream != null)
    {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)))
        {
            String line;
            while ((line = reader.readLine()) != null)
            {
                System.out.println(line);
            }
        }
    } else
    {
        System.out.println("未找到文件!");
    }
}

5、使用 PathMatchingResourcePatternResolver 类

PathMatchingResourcePatternResolver 是 Spring 提供的一个工具类,用于解析资源路径模式。它扩展了 ResourceLoader 的功能。

@Test
public void readFileByResourcePattern() throws IOException
{
    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    Resource resource = resolver.getResource("classpath:/file/myBlog.txt");
    if (resource.exists())
    {
        Path path = resource.getFile().toPath();
        String content = new String(Files.readAllBytes(path));
        System.out.println(content);
    } else
    {
        System.out.println("未找到文件!");
    }
}

注意:resource.getFile() 方法在某些情况下可能会抛出 UnsupportedOperationException,特别是在资源是从 JAR 文件中加载时。所以,更通用的方法是使用 InputStream 来读取文件内容。

到此这篇关于SpringBoot获取resources目录下的文件的文章就介绍到这了,更多相关SpringBoot获取resources目录下文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot使用RestTemplate消费REST服务的几个问题记录

    Spring Boot使用RestTemplate消费REST服务的几个问题记录

    这篇文章主要介绍了Spring Boot使用RestTemplate消费REST服务的几个问题记录,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 浅析Java中的 new 关键字

    浅析Java中的 new 关键字

    java中的new关键字是实例化对象,接下来本文通过一个案例给大家讲解Java中的 new 关键字,感兴趣的朋友可以参考下
    2016-08-08
  • java简易小游戏制作代码

    java简易小游戏制作代码

    这篇文章主要介绍了java简易小游戏制作代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Spring框架之IOC介绍讲解

    Spring框架之IOC介绍讲解

    IOC-Inversion of Control,即控制反转。它不是什么技术,而是一种设计思想。这篇文章将为大家介绍一下Spring控制反转IOC的原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧

    零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧

    这篇文章主要介绍了零基础学Java:Java开发工具 Eclipse 安装过程创建第一个Java项目及Eclipse的一些基础使用技巧,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • springboot注册bean的三种方法

    springboot注册bean的三种方法

    这篇文章主要介绍了springboot注册bean的三种方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Spring中的@Value和@PropertySource注解详解

    Spring中的@Value和@PropertySource注解详解

    这篇文章主要介绍了Spring中的@Value和@PropertySource注解详解,@PropertySource:读取外部配置文件中的key-value保存到运行的环境变量中,本文提供了部分实现代码,需要的朋友可以参考下
    2023-11-11
  • 基于Rest的API解决方案(jersey与swagger集成)

    基于Rest的API解决方案(jersey与swagger集成)

    下面小编就为大家带来一篇基于Rest的API解决方案(jersey与swagger集成)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 浅谈java 增强型的for循环 for each

    浅谈java 增强型的for循环 for each

    下面小编就为大家带来一篇浅谈java 增强型的for循环 for each。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • SpringBoot解决跨域问题小结

    SpringBoot解决跨域问题小结

    在现代Web应用中,由于安全性和隐私的考虑,浏览器限制了从一个域向另一个域发起的跨域HTTP请求,Spring Boot提供了多种方式来处理跨域请求,本文将介绍其中的几种方法,感兴趣的朋友一起看看吧
    2023-12-12

最新评论