关于org.apache.poi 导出excel时引发的No such file or directory
java.lang.RuntimeException: java.io.IOException: No such file or directory at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:569)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:558
)
原因:这个问题是指 文件目录不存在
poi默认将导出的excel导出到系统的临时目录
我直接跟源码贴图
首先跟进这个方法 //首先跟进这个方法 public Sheet createSheet(String sheetname){ return createAndRegisterSXSSFSheet(_wb.createSheet(sheetname)); } 继续跟进 public Sheet createSheet(String sheetname){ return createAndRegisterSXSSFSheet(_wb.createSheet(sheetname)); }SXSSFSheet createAndRegisterSXSSFSheet(XSSFSheet xSheet){ SXSSFSheet sxSheet=null; try { sxSheet=new SXSSFSheet(this,xSheet); } catch (IOException ioe) { throw new RuntimeException(ioe); } registerSheetMapping(sxSheet,xSheet); return sxSheet; }
重点解决方法:
我直接粘贴 最终解决的代码了
非serverlet应用用这个
//设置临时目录解决 系统回收默认 临时文件 File file = new File("/mnt/soft/spring-boot/tomcat_basedir"); file.mkdirs(); TempFile.setTempFileCreationStrategy(new TempFile.DefaultTempFileCreationStrategy(file)); 把这段代码放到 Sheet sh = wb.createSheet("sheet1"); 这个之前就ok了
当然网上的普遍做法是tomcat根目录创建temp 文件夹而这种做法也只是针对serverlet容器内调用poi输出 ,而如果你不是那就按照我的方式来吧