一、問題 在用freemarker生成word文檔的時候,在本地可以成功獲取到類路徑下的資源文件。但是打了jar包放在linux系統下啟動,無法獲取到該文件,導致生成的word文檔是個空文檔。 二、解決 1、文件存放路徑 2、原先代碼 第一種 File docxFile = ResourceUtil ...
一、問題
在用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都可以獲取到類路徑下的文件了