Spring boot,无法读取文件,启动时使用jar包。 当我使用.war开始时,一切正常
这是war maven pom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>p12</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
但请使用java -jar
我想从java -jar开始,现在我需要做什么? spring boot version 1.4.4
public void generater(HttpServletResponse response, boolean testMode) {
ExcelTemplateEnum excelTemplate = this.exportTemplate();
FileInputStream is = null;
Workbook workbook = null;
try {
String templateFilePath = this.getTemplateFilePath(excelTemplate);
URL url = ExeclExportHandler.class.getClassLoader().getResource(templateFilePath);
is = new FileInputStream(url.getFile());
ExcelTransformer transformer = this.getExcelTransformer();
// 渲染导出数据
if (isMultipleBeans()) {
List<Map<String, Object>> data = this.renderDataList();
this.checkExportParam(data);
workbook = transformer.transform(is, getTemplateSheetNamesList(), getSheetNamesList(), data);
} else {
Map<String, Object> data = this.renderData();
this.checkExportParam(data);
workbook = transformer.transform(is, data);
}
if (testMode) {
...
} else {
ExcelHelper.setExcelHeader(response, excelTemplate.outname());
workbook.write(response.getOutputStream());
response.flushBuffer();
}
} catch (Exception e) {
...
} finally {
IOUtils.closeQuietly(is, workbook);
}
}
错误第75行
is = new FileInputStream(url.getFile());
答案 0 :(得分:2)
您必须按Class.getResourceAsStream()
访问资源,因为您无法访问jar中包含的文件:
is = this.getClass().getResourceAsStream(templateFilePath)
如果它适用于战争它只是运气,因为你的servlet / J2EE容器似乎解压你的战争......所有容器都不是这样(由于规范是由容器决定它是否将打开战争或不打开)。具有不同容器的手段你也会得到这个战争的例外。