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

种地  金牌会员 | 2022-9-17 08:39:49 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 942|帖子 942|积分 2826

一、问题

在用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.                        
  8.                 </plugins>
  9.                 <resources>
  10.                         <resource>
  11.                                 <directory>src/main/resources</directory>
  12.                                 <filtering>true</filtering>
  13.                                 <excludes>
  14.                                         <exclude>**/*.xlsx</exclude>
  15.                                         <exclude>**/*.xls</exclude>
  16.                                     
  17.                                         <exclude>**/*.zip</exclude>
  18.                                 </excludes>
  19.                         </resource>
  20.                         <resource>
  21.                                 <directory>src/main/resources</directory>
  22.                                 <filtering>false</filtering>
  23.                                 <includes>
  24.                                         <include>**/*.xlsx</include>
  25.                                         <include>**/*.xls</include>
  26.                                         <include>**/*.zip</include>
  27.                                 </includes>
  28.                         </resource>
  29.                 </resources>
  30.         </build>
复制代码
这样在本地和linux都可以获取到类路径下的文件了

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

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

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表