一、問題
在用freemarker生成word檔案的時候,在本地可以成功獲取到類路徑下的資源檔案,但是打了jar包放在linux系統下啟動,無法獲取到該檔案,導致生成的word檔案是個空檔案,
二、解決
1、檔案存放路徑

2、原先代碼
- 第一種
File docxFile = ResourceUtils.getFile("classpath:templates/"+zip);
- 第二種
File docxFile = new File(WordUtils.class.getClassLoader().getResource(template).getPath());
以上兩種在linux系統種沒用,只是獲取到target下的檔案,在jar檔案中,不能直接通過檔案資源路徑拿到檔案,但是可以在jar包中拿到檔案流,jar中如果想要讀取classes下的檔案,只能使用getResourceAsStream按流的方式讀取,
3、解決方案
ClassPathResource resource = new ClassPathResource("templates/附件1.zip" );
//獲取流
InputStream inputStream = resource.getInputStream();
//新建檔案
File docxFile = new File(fileProperties.getInventoryAttachPath()+File.separator+zip);
//復制到新建的檔案中去
IOUtils.copy(inputStream,docxFile);
這時候還是獲取不到檔案,是因為回去classPath找是否有這個檔案,springboot的maven專案中只會加載classPath同級目錄的檔案,其他的檔案需要在pom.xml中配置
因此在pom.xml中配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.xlsx</exclude>
<exclude>**/*.xls</exclude>
<!--加上要加載的檔案-->
<exclude>**/*.zip</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xlsx</include>
<include>**/*.xls</include>
<include>**/*.zip</include>
</includes>
</resource>
</resources>
</build>
這樣在本地和linux都可以獲取到類路徑下的檔案了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/506006.html
標籤:其他
上一篇:springboot~ApplicationContextAware與@Autowired注解
下一篇:我的設計模式之旅 ② 單例模式
