springboot项目读取 resources 目录下的文件的9种方式(总结)

简介: springboot项目读取 resources 目录下的文件的9种方式(总结)

1: 使用 ClassLoader.getResourceAsStream() 方法

  可以使用类加载器来获取资源文件的输入流。该方法接受一个资源文件路径参数,返回一个 InputStream 对象。

InputStream inputStream = getClass().getClassLoader().getResourceAsStream("file.txt");

  注意,该方法返回的资源文件路径是相对于类加载器的根路径。因此,对于 resources 目录下的文件,需要在文件名前加上 “classpath:” 前缀。例如: “classpath:file.txt”。

2: 使用 Class.getResourceAsStream() 方法

  可以使用 Class 类的 getResourceAsStream() 方法来读取资源文件。该方法接受一个资源文件路径参数,返回一个 InputStream 对象。

InputStream inputStream = getClass().getResourceAsStream("/file.txt");

  该方法返回的资源文件路径是相对于当前类的路径。因此,对于 resources 目录下的文件,需要在文件名前加上 “/” 前缀。例如: “/file.txt”。

3: 使用 ResourceLoader 加载文件

  可以使用 Spring 的 ResourceLoader 接口来加载资源文件。ResourceLoader 接口有一个 getResource() 方法,接受一个资源文件路径参数,返回一个 Resource 对象。

Resource resource = resourceLoader.getResource("classpath:file.txt");
InputStream inputStream = resource.getInputStream();

需要注意的是:需要在类中注入 ResourceLoader 对象,并在方法中使用。例如:

@Autowired
private ResourceLoader resourceLoader;
public void readResourceFile() throws IOException {
    Resource resource = resourceLoader.getResource("classpath:file.txt");
    InputStream inputStream = resource.getInputStream();
}

4: 使用 ResourceUtils 加载文件

  ResourceUtils 是 Spring 提供的一个工具类,用于加载资源文件。可以使用 ResourceUtils.getFile() 方法来获取文件对象。

File file = ResourceUtils.getFile("classpath:file.txt");

需要注意的是:该方法只适用于本地文件系统和 JAR 文件。对于 WAR 文件或者其他类型的文件,该方法可能无法正常工作。

5: 使用 ApplicationContext 加载文件

  可以使用 ApplicationContext 的 getResource() 方法来加载资源文件。该方法接受一个资源文件路径参数,返回一个 Resource 对象。

Resource resource = applicationContext.getResource("classpath:file.txt");
InputStream inputStream = resource.getInputStream();

需要注意的是:需要在类中注入 ApplicationContext 对象,并在方法中使用。例如:

@Autowired
private ApplicationContext applicationContext;
public void readResourceFile() throws IOException {
    Resource resource = applicationContext.getResource("classpath:file.txt");
    InputStream inputStream = resource.getInputStream();
}

6: 使用 ServletContext 加载文件

  可以使用 ServletContext 的 getResourceAsStream() 方法来读取资源文件。该方法接受一个资源文件路径参数,返回一个 InputStream 对象。

InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/classes/file.txt");

需要注意的是:需要在类中注入 ServletContext 对象,并在方法中使用。例如:

@Autowired
private ServletContext servletContext;
public void readResourceFile() throws IOException {
    InputStream inputStream = servletContext.getResourceAsStream("/WEB-INF/classes/file.txt");
}

7: 使用 File System 加载文件

  可以使用 File 类来读取资源文件。需要提供完整的文件路径。

File file = new File("src/main/resources/file.txt");
InputStream inputStream = new FileInputStream(file);
• 1
• 2

需要注意的是:使用该方法需要提供完整的文件路径,因此需要知道文件所在的绝对路径。

8: 使用 Paths 和 Files 加载文件

  可以使用 Java NIO 中的 Paths 和 Files 类来读取资源文件。该方法需要提供完整的文件路径。

Path path = Paths.get("src/main/resources/file.txt");
InputStream inputStream = Files.newInputStream(path);

  需要注意的是,使用该方法需要提供完整的文件路径,因此需要知道文件所在的绝对路径。

9: 使用 ClassPathResource 加载文件

  可以使用 Spring 提供的 ClassPathResource 类来读取资源文件。该方法需要提供资源文件的相对路径。

ClassPathResource resource = new ClassPathResource("file.txt");
InputStream inputStream = resource.getInputStream();

需要注意的是:ClassPathResource 会在类路径下查找资源文件,因此不需要提供完整的文件路径。

10:总结

  以上 9 种方式,都可以用来读取 Spring Boot 项目中 resources 目录下的文件。不同的方法适用于不同的场景,可以根据需要选择合适的方法。

实际开发中推荐使用以下几种方法

  • 使用 ClassLoader.getResourceAsStream() 方法
    这是一种通用的方式,可以适用于大多数情况。
  • 使用 ResourceLoader 加载文件
    如果使用 Spring 框架,可以使用 ResourceLoader 接口来加载资源文件。这种方式适用于大多数 Spring Boot 项目。
  • 使用 ClassPathResource 加载文件
    如果只需要读取 resources 目录下的文件,可以使用 Spring 提供的 ClassPathResource 类来加载文件。这种方式比较简单,不需要提供完整的文件路径。
    需要注意的是:使用不同的方式需要了解其适用的场景和使用方法。对于不同的项目和需求,可能需要选择不同的方式。
目录
相关文章
|
10月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
638 3
|
10月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
961 2
|
10月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
361 0
|
10月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
740 0
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
264 0
|
7月前
|
JavaScript Java 关系型数据库
基于springboot的项目管理系统
本文探讨项目管理系统在现代企业中的应用与实现,分析其研究背景、意义及现状,阐述基于SSM、Java、MySQL和Vue等技术构建系统的关键方法,展现其在提升管理效率、协同水平与风险管控方面的价值。
|
7月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
7月前
|
JavaScript Java 关系型数据库
基于springboot的古树名木保护管理系统
本研究针对古树保护面临的严峻挑战,构建基于Java、Vue、MySQL与Spring Boot技术的信息化管理系统,实现古树资源的动态监测、数据管理与科学保护,推动生态、文化与经济可持续发展。
|
7月前
|
监控 安全 JavaScript
2025基于springboot的校车预定全流程管理系统
针对传统校车管理效率低、信息不透明等问题,本研究设计并实现了一套校车预定全流程管理系统。系统采用Spring Boot、Java、Vue和MySQL等技术,实现校车信息管理、在线预定、实时监控等功能,提升学校管理效率,保障学生出行安全,推动教育信息化发展。