zoukankan      html  css  js  c++  java
  • 关于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输出 ,而如果你不是那就按照我的方式来吧
  • 相关阅读:
    Problem C: 爬楼梯
    Problem E: 倒水(Water)
    Problem H: tmk买礼物
    HDU 1078 FatMouse and Cheese
    POJ 3186 Treats for the Cows
    POJ 1661 Help Jimmy
    POJ 1458 Common Subsequence
    2018-软工机试-D-定西
    2018-软工机试-F-庙会
    2018-软工机试-C-和你在一起
  • 原文地址:https://www.cnblogs.com/af826/p/14289275.html
Copyright © 2011-2022 走看看