找回密码
 立即注册
首页 业界区 业界 SpringBoot读取Resources下的文件

SpringBoot读取Resources下的文件

杠氯 2025-6-23 11:59:54
SpringBoot读取Resources下的文件

背景

在开发时候遇到需要通过 Resources 目录下某个 excel 文件作为模板生成文件。但遇到 POI 读取文件的时候发生了 No valid entries or contents found, this is not a valid 00xML (office open XML) fil.​ 的错误,该错误表示读取的文件格式是错误的。
通过对同一份文件从 Resources 下读取和外部读取发现,两者的文件大小不一致,且 Resources 下的文件已经损坏。
造成此问题可能的情况是(当时忘记查看 pom.xml,以下纯属猜测)
  1.         <build>
  2.         <resources>
  3.                        
  4.             <resource>
  5.                 <directory>src/main/resources</directory>
  6.                                
  7.                 <filtering>true</filtering>
  8.             </resource>
  9.         </resources>
  10.     </build>
复制代码
目标


  • 可以在运行时读取到 Resources 下的文件
  • 消除 POI 读取的错误
具体操作

修改pom.xml文件
  1. <build>
  2.    <resources>
  3.       <resource>
  4.           <directory>src/main/resources</directory>
  5.           <filtering>false</filtering>
  6.       </resource>
  7.    </resources>
  8. </build>
  9. <build>
  10.    <plugins>
  11.         <plugin>
  12.                 <groupId>org.apache.maven.plugins</groupId>
  13.                 maven-resources-plugin</artifactId>
  14.                 <configuration>
  15.                 <nonFilteredFileExtensions>
  16.                        
  17.                         <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
  18.                 </nonFilteredFileExtensions>
  19.                 </configuration>
  20.         </plugin>
  21.    </plugins>
  22.    <resources>
  23.       <resource>
  24.          <directory>src/main/resources</directory>
  25.          <filtering>true</filtering>
  26.       </resource>
  27.    </resources>
  28. </build>
复制代码
读取Resources下的文件
  1. // 方案一
  2. File file = new File("D:\\1.xlsx");
  3. InputStream resourceAsStream = ScheduleTask.class.getClassLoader().getResourceAsStream("1.xlsx");
  4. FileOutputStream fileOutputStream = new FileOutputStream(file);
  5. fileOutputStream.write(resourceAsStream.readAllBytes());
  6. fileOutputStream.flush();
  7. fileOutputStream.close();
  8. resourceAsStream.close();
  9. // 方案二
  10. File file = ResourceUtils.getFile("classpath:1.xlsx");
  11. FileInputStream fileInputStream = new FileInputStream(file);
  12. FileOutputStream fileOutputStream = new FileOutputStream("D:\\1.xlsx");
  13. fileOutputStream.write(fileInputStream.readAllBytes());
  14. fileOutputStream.flush();
  15. fileOutputStream.close();
  16. fileInputStream.close();
复制代码
总结


  • POI读取错误主要是由于在build的时候文件没有被正确的写入进去,只需要调整pom.xml文件的调整即可使得POI正确的读取到文件。
  • 实践中采用pom.xml修改中的第一种方案发现其与nacos貌似存在冲突,建议采用方案二。

来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册