首页 > 其他分享 >在使用InputStream templateStream = this.getClass().getClassLoader().getResourceAsStream(path); 时的相关报错

在使用InputStream templateStream = this.getClass().getClassLoader().getResourceAsStream(path); 时的相关报错

时间:2024-06-21 15:42:49浏览次数:12  
标签:文件 getResourceAsStream getClass getClassLoader Maven 报错 resources 资源

在使用 this.getClass().getClassLoader().getResourceAsStream()  读取项目目录路径下的文件需要注意 在pom.xml 文件中加入

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>

在 Maven 项目中,尤其是当涉及到 Spring Boot 应用程序时,this.getClass().getClassLoader().getResourceAsStream() 方法通常用于从类路径(classpath)中加载资源文件。这些资源文件通常位于项目的 src/main/resources 目录下,因为 Maven 默认会将这个目录下的所有内容复制到构建的输出目录(例如 target/classes)中,并作为类路径的一部分。

关于你提到的 pom.xml 文件中的配置,有几个关键点需要解释:

  1. Spring Boot Maven 插件 (spring-boot-maven-plugin):

    • 这个插件是 Spring Boot 项目所必需的,它提供了许多有用的功能,如打包可执行 JAR 或 WAR 文件、管理主类的位置等。但是,对于你提到的资源文件加载,这个插件本身并不直接涉及。
  2. Maven 资源插件 (maven-resources-plugin):

    • 这个插件用于处理 Maven 项目中的资源文件。默认情况下,它会复制 src/main/resources 目录下的所有文件到输出目录。
    • <nonFilteredFileExtensions> 配置是用来指定哪些文件扩展名在资源过滤过程中应该被忽略。资源过滤是一个 Maven 功能,允许你在资源文件中使用 Maven 属性(如 ${project.version}),并在构建过程中用实际的属性值替换它们。但是,有些文件(如 Excel 文件 .xlsx 或 .xls)不应该被过滤,因为它们包含二进制数据而不是文本。因此,你添加了这些扩展名以确保它们不会被错误地处理。

为什么需要这些配置来加载资源文件?

实际上,你提到的这些配置与直接使用 this.getClass().getClassLoader().getResourceAsStream() 加载资源文件并没有直接的关系。但是,确保资源文件被正确地复制到输出目录(并因此成为类路径的一部分)是使用该方法的前提。

如果你的资源文件(如 Excel 文件)位于 src/main/resources 目录下,并且你没有对它们进行任何特殊的 Maven 过滤配置,那么这些配置可能不是必需的。但是,添加 <nonFilteredFileExtensions> 配置是一个好习惯,以确保你的二进制资源文件不会被错误地处理。

总之,确保资源文件位于正确的位置(通常是 src/main/resources),并且它们被正确地复制到输出目录,是使用 this.getClass().getClassLoader().getResourceAsStream() 方法加载它们的关键。

 

标签:文件,getResourceAsStream,getClass,getClassLoader,Maven,报错,resources,资源
From: https://www.cnblogs.com/jabez1992/p/18260656

相关文章