826

导航

关于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输出 ,而如果你不是那就按照我的方式来吧

 

posted on 2021-01-17 16:11  826  阅读(1332)  评论(0编辑  收藏  举报