Linux下部署Java项目下载resources下面的文件问题
将Linux作为部署服务器是大部分IT人的选择,但是在部署java项目的时候,需要下载相应的模板文件,我现在将模板文件放在resources项目目录下的问题总结。
maven打包的问题
在最开始的时候,是使用maven进行项目相关包的管理。但是在maven项目中,默认是不会将resources下的文件打包进去,可以通过如下解决:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.html</include>
<include>**/*.xlsx</include>
</includes>
</resource>
</resources>
最开始的时候,没有将xlsx文件没有打包到项目中,一直找不到文件,这是一个问题。
linux通过classPathResource 找不到文件
在开始的时候,我使用如下代码获取文件:
ClassPathResource classPathResource = null;
if (StringUtils.equalsIgnoreCase(templateType, CommonTemplateTypeEnum.MEDICINAL_CONFLICT_TEMPLATE.getCode())) {
classPathResource = new ClassPathResource("templates/template.xlsx");
}
if (StringUtils.equalsIgnoreCase(templateType, CommonTemplateTypeEnum.MEDICINAL_TEMPLATE.getCode())) {
classPathResource = new ClassPathResource("templates/模板.xlsx");
}
InputStream inputStream = classPathResource.getInputStream();
//创建file对象
File file = classPathResource.getFile();
通过上面的代码进行下载在本地上没有问题,但是在linux上有问题。
原来是相对路径在linux上找不到,在linux下读取resource下的文件就只能使用流来读取文件,只能用流读取。
这是由于linux下面需要通过流的方式进行加载文件,并下载。通过如下方式可以解决:
InputStream inputStream = null;
String encoderstr = "";
if (StringUtils.equalsIgnoreCase(templateType, CommonTemplateTypeEnum.MEDICINAL_CONFLICT_TEMPLATE.getCode())) {
inputStream = this.getClass().getClassLoader().getResourceAsStream("templates/template.xlsx");
encoderstr = URLEncoder.encode("template.xlsx", "UTF-8");
}
if (StringUtils.equalsIgnoreCase(templateType, CommonTemplateTypeEnum.MEDICINAL_TEMPLATE.getCode())) {
inputStream = this.getClass().getClassLoader().getResourceAsStream("templates/模板.xlsx");
encoderstr = URLEncoder.encode("模板.xlsx", "UTF-8");
}
通过上面的方式就可以进行下载了。完美解决。希望对你有帮助!