java 获取类路径下的资源文件

x33g5p2x  于9个月前 转载在 Java  
字(1.6k)|赞(0)|评价(0)|浏览(1152)

一、问题

在用freemarker生成word文档的时候,在本地可以成功获取到类路径下的资源文件。但是打了jar包放在linux系统下启动,无法获取到该文件,导致生成的word文档是个空文档。

二、解决

1、文件存放路径

2、原先代码
  • 第一种
  1. File docxFile = ResourceUtils.getFile("classpath:templates/"+zip);
  • 第二种
  1. File docxFile = new File(WordUtils.class.getClassLoader().getResource(template).getPath());

以上两种在linux系统种没用,只是获取到target下的文件。在jar文件中,不能直接通过文件资源路径拿到文件,但是可以在jar包中拿到文件流。jar中如果想要读取classes下的文件,只能使用getResourceAsStream按流的方式读取。

3、解决方案
  1. ClassPathResource resource = new ClassPathResource("templates/附件1.zip" );
  2. //获取流
  3. InputStream inputStream = resource.getInputStream();
  4. //新建文件
  5. File docxFile = new File(fileProperties.getInventoryAttachPath()+File.separator+zip);
  6. //复制到新建的文件中去
  7. IOUtils.copy(inputStream,docxFile);

这时候还是获取不到文件,是因为回去classPath找是否有这个文件,springboot的maven项目中只会加载classPath同级目录的文件,其他的文件需要在pom.xml中配置
因此在pom.xml中配置:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. <resources>
  9. <resource>
  10. <directory>src/main/resources</directory>
  11. <filtering>true</filtering>
  12. <excludes>
  13. <exclude>**/*.xlsx</exclude>
  14. <exclude>**/*.xls</exclude>
  15. <!--加上要加载的文件-->
  16. <exclude>**/*.zip</exclude>
  17. </excludes>
  18. </resource>
  19. <resource>
  20. <directory>src/main/resources</directory>
  21. <filtering>false</filtering>
  22. <includes>
  23. <include>**/*.xlsx</include>
  24. <include>**/*.xls</include>
  25. <include>**/*.zip</include>
  26. </includes>
  27. </resource>
  28. </resources>
  29. </build>

这样在本地和linux都可以获取到类路径下的文件了

相关文章

最新文章

更多