Spring开机,无法读取文件,启动时使用jar包
Spring boot, The file can not be read, Use jar package when starting
Spring开机,无法读取文件,启动时使用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 引导版本 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);
}
}
error line 75
is = new FileInputStream(url.getFile());
您必须通过 Class.getResourceAsStream()
访问资源,因为您无法访问打包在 jar 中的文件:
is = this.getClass().getResourceAsStream(templateFilePath)
如果它与 war 一起工作,那只是运气,因为你的 servlet/J2EE-container 似乎解压了你的 war...但并非所有容器都是这种情况(由于是否解压 war 取决于容器的规范)。意味着使用不同的容器你也会得到 war.
的异常
Spring开机,无法读取文件,启动时使用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 引导版本 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);
}
}
error line 75
is = new FileInputStream(url.getFile());
您必须通过 Class.getResourceAsStream()
访问资源,因为您无法访问打包在 jar 中的文件:
is = this.getClass().getResourceAsStream(templateFilePath)
如果它与 war 一起工作,那只是运气,因为你的 servlet/J2EE-container 似乎解压了你的 war...但并非所有容器都是这种情况(由于是否解压 war 取决于容器的规范)。意味着使用不同的容器你也会得到 war.
的异常